C++1z インクルードするファイルが存在するかを確認する__has_include

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>

// <optional>ヘッダが存在していたらインクルードする
#if __has_include(OPTIONAL_HEADER)
    #include OPTIONAL_HEADER
#endif

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。