Namespaces
Variants

Standard library header <ciso646> (until C++20) , <iso646.h>

From cppreference.net
Standard library headers

このヘッダーは元々C標準ライブラリに <iso646.h> として存在していました。

C言語との互換性ヘッダーであり、Cでは alternative operator representations を定義していますが、これらはC++ではキーワードです。

これは、準拠した実装において、このヘッダーをインクルードしても効果がないことを意味します。

注記

古いまたは非準拠のコンパイラでは、 代替演算子表現 を使用する際に、このヘッダーをインクルードする必要がある場合があります。

<ciso646> はC++20で削除されました。対応する <iso646.h> はC++20でも引き続き利用可能です。

C++20以前は、 <ciso646> をインクルードすることが、実装固有のライブラリバージョンマクロの定義を他の影響を与えずに取得する手法として使用される場合がありました。 C++20以降では、この目的のために <version> ヘッダーが追加されました。

#include <ciso646>
#ifdef _LIBCPP_VERSION
#error Using LLVM libc++
#elif __GLIBCXX__ // Note: only version 6.1 or newer define this in ciso646
#error Using GNU libstdc++
#elif _CPPLIB_VER // Note: used by Visual Studio
#error Using Microsoft STL
#else
#error Using an unknown standard library
#endif

出力例:

main.cpp:7:2: error: Using Microsoft STL
#error Using Microsoft STL
 ^
1 error generated.