[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