Namespaces
Variants

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

From cppreference.net
Standard library headers

该头文件最初作为 <iso646.h> 存在于C标准库中。

兼容性头文件,在C语言中定义了 替代运算符表示 ,这些在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__ // 注意:仅6.1或更新版本在ciso646中定义此宏
#error Using GNU libstdc++
#elif _CPPLIB_VER // 注意: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.