如何检查 C++20 支持?对于 C++20,__cplusplus 的值是多少?
How do I check for C++20 support? What is the value of __cplusplus for C++20?
相关问题How do I check for C++11 support? and
如何查询编译器是否可以处理/设置为使用 C++20?我知道原则上可以通过以下方式查询 C++ 版本:
#if __cplusplus > ???
// C++20 code here
#endif
对于 C++20,???
应该是什么?
太早了。
直到标准取代它,使用:
#if __cplusplus > 201703L
// C++20 code
#endif
因为 C++20 的预定义宏将大于 C++17 的预定义宏。
正如@SombreroChicken 的回答所述,[cpp.predefined] (1.1) 指定(强调我的):
__cplusplus
The integer literal 201703L
. [Note: It is intended that future versions of this International Standard will replace the value
of this macro with a greater value.]
截至 2018 年 11 月,使用的宏是:
- GCC 9.0.0:
201709L
适用于 C++2a。 Live demo
- Clang 8.0.0:
201707L
。 Live demo
- VC++ 15.9.3:
201704L
(如@Acorn 的回答所述)。
PS:如果你对具体的功能感兴趣,那么[cpp.predefined] (1.8)定义了相应的宏,你可以使用。不过请注意,它们将来可能会发生变化。
尚无已知的 __cplusplus
版本,因为 C++20 仍在开发中。只有 C++20 的草稿。
__cplusplus
The integer literal 201703L
. [Note: It is intended that future versions of this International Standard will replace the value
of this macro with a greater value. —end note]
至于检查,我会使用@gsamaras 的回答。
C++20 的值为 202002L
,如您在 [cpp.predefined]p1.1:
中所见
__cplusplus
The integer literal 202002L
. [ Note: It is intended that future versions of this International Standard will replace the value of this macro with a greater value. — end note ]
因此,对于已经执行了新标准的编译器,您可以通过以下方式查看:
#if __cplusplus >= 202002L
// C++20 (and later) code
#endif
这是编译器目前支持的:
- 叮当声 >= 10
- 海湾合作委员会 >= 11
- MSVC >= 19.29(需要
/Zc:__cplusplus
)
- ICX >= 2021
- ICC:否(版本 >= 2021 定义
202000L
;注意 0
)
相关问题How do I check for C++11 support? and
如何查询编译器是否可以处理/设置为使用 C++20?我知道原则上可以通过以下方式查询 C++ 版本:
#if __cplusplus > ???
// C++20 code here
#endif
对于 C++20,???
应该是什么?
太早了。
直到标准取代它,使用:
#if __cplusplus > 201703L
// C++20 code
#endif
因为 C++20 的预定义宏将大于 C++17 的预定义宏。
正如@SombreroChicken 的回答所述,[cpp.predefined] (1.1) 指定(强调我的):
__cplusplus
The integer literal
201703L
. [Note: It is intended that future versions of this International Standard will replace the value of this macro with a greater value.]
截至 2018 年 11 月,使用的宏是:
- GCC 9.0.0:
201709L
适用于 C++2a。 Live demo - Clang 8.0.0:
201707L
。 Live demo - VC++ 15.9.3:
201704L
(如@Acorn 的回答所述)。
PS:如果你对具体的功能感兴趣,那么[cpp.predefined] (1.8)定义了相应的宏,你可以使用。不过请注意,它们将来可能会发生变化。
尚无已知的 __cplusplus
版本,因为 C++20 仍在开发中。只有 C++20 的草稿。
__cplusplus
The integer literal
201703L
. [Note: It is intended that future versions of this International Standard will replace the value of this macro with a greater value. —end note]
至于检查,我会使用@gsamaras 的回答。
C++20 的值为 202002L
,如您在 [cpp.predefined]p1.1:
__cplusplus
The integer literal
202002L
. [ Note: It is intended that future versions of this International Standard will replace the value of this macro with a greater value. — end note ]
因此,对于已经执行了新标准的编译器,您可以通过以下方式查看:
#if __cplusplus >= 202002L
// C++20 (and later) code
#endif
这是编译器目前支持的:
- 叮当声 >= 10
- 海湾合作委员会 >= 11
- MSVC >= 19.29(需要
/Zc:__cplusplus
) - ICX >= 2021
- ICC:否(版本 >= 2021 定义
202000L
;注意0
)