[C++] 在源代码中添加C++的版本检查
通常在分享C++代码时由于对方编译环境过旧之类的问题,会导致新标准的C++无法运行。一个解决方法是用预处理预先检查版本。
标准C++
#if __cplusplus < 202000L
#error "This program requires C++ 17 or later"
#endif
这里的__cplusplus和#error都是标准C++的特性,和C++版本的对照表为
| C++版本 | __cplusplus |
|---|---|
| C++ 11 之前 | 199711L |
| C++ 11 | 201103L |
| C++ 14 | 201402L |
| C++ 17 | 201703L |
| C++ 20 | 202002L |
由于是整数,可以只用前四位,后两位补零即可
主流编译器支持的写法
_HAS_CXX20这样的宏,虽然不是标准,但主流编译器(GCC, MSVC)均支持,也可以尝试使用
#if !_HAS_CXX20
#error "This program requires C++ 17 or later"
#endif
要求C++的某个特性
可以使用 Feature-test宏,比如Concept特性对应的__cpp_concepts
#if !__cpp_concepts
#error "This program requires C++ concept feature!"
#endif