C++1zから、インクルードするファイルが存在するかを確認するプリプロセッサ機能が追加されます。 __has_include式の引数として、ダブルクォーテーションで囲まれたインクルードファイル名、山カッコで囲まれたインクルードファイル名、もしくはプリプロセッサトークン名を指定することで、プリプロセス時にそのファイルが存在するかを#if/#elifで確認できます。 // <optional>ヘッダが存在していたらインクルードする #if __has_include(<optional>) #include <optional> #endif // "optional"ヘッダが存在していたらインクルードする #if __has_include("optional") #include "optional" #endif #define OPTIONAL_HEADER <optional> //