与问题相关如何检查C++ 11支持?而什么是__cplusplus对C++ 17的价值?
如何查询编译器是否可以处理/设置为使用C++ 20?我知道原则上可以通过以下方式查询C++版本:
#if __cplusplus > ???
// C++20 code here
#endif
Run Code Online (Sandbox Code Playgroud)
什么应该???是C++ 20?
gsa*_*ras 35
现在为时尚早.
在标准取代之前,请使用:
#if __cplusplus > 201703L
// C++20 code
#endif
Run Code Online (Sandbox Code Playgroud)
因为C++ 20的预定义宏将大于C++ 17的预定义宏.
正如@SombreroChicken的回答所提到的,[cpp.predefined](1.1)指定(强调我的):
__cplusplus整数文字
201703L.[注:这是预期的是本国际标准的未来版本将取代这个宏用的价值更大的价值.]
截至2018年11月,使用的宏是:
201709L用于C++ 2a.Live demo201707L. Live demo201704L如@ Acorn的回答提到).PS:如果您对特定功能感兴趣,那么[cpp.predefined](1.8)定义了您可以使用的相应宏.但请注意,它们将来可能会发生变化.
Aco*_*orn 11
新值将在[cpp.predefined] p1.1的某个时刻提供:
__cplusplus整数文字
201703L.[注意:本国际标准的未来版本将以更大的价值取代此宏的价值. - 结束说明]
主要编制者使用的当前值是截至2018-11-30:
201709L godbolt201707L godbolt201704L godbolt要求/Zc:__cplusplus)由于它们都已经高于C++ 17 201703L,你已经可以使用:
#if __cplusplus > 201703L
// C++20 code
#endif
Run Code Online (Sandbox Code Playgroud)
目前尚无已知__cplusplus版本,因为C++ 20仍处于开发阶段.只有C++ 20的草稿.
在最新的N4788草案仍包含:
__cplusplus整数文字
201703L.[注意:本国际标准的未来版本将以更大的价值取代此宏的价值. - 尾注]
至于检查它,我会使用@gsamaras的答案.
| 归档时间: |
|
| 查看次数: |
3580 次 |
| 最近记录: |