我们正在尝试在 C++17 下测试一些代码,并将其 更改为 std::uncaught_exception
。我似乎无法让 GCC 提供 __cplusplus
的值:
$ /opt/local/bin/g++ -std=c++17 -dM -E - </dev/null | grep __cplusplus
cc1: warning: command line option '-std=c++1z' is valid for C++/ObjC++ but not for C
$
和:
$ /opt/local/bin/g++ --version
g++-mp-6 (MacPorts gcc6 6.1.0_0) 6.1.0
Copyright (C) 2016 Free Software Foundation, Inc.
使用C++17时 __cplusplus
的值是多少?
原文由 jww 发布,翻译遵循 CC BY-SA 4.0 许可协议
tl; dr:对于 C++17,
__cplusplus
是201703L
。根据草案标准 N4594 §16.8/p1 预定义宏名称 [cpp.predefined] ( Emphasis Mine ):
但是,为 C++14 标准指定了相同的值。显然,目前还没有为 C++17 标准设置官方/标准
__cplusplus
值。在 GCC 版本 6.1 和 7.0 中,该值更改为 201500
现场演示
在 Clang 版本 3.8 和 3.9 中,该值保持不变 201406 。
因此,您必须稍等片刻才能得出标准值。
- - 更新 - -
根据 C++ 标准 §19.8/p1 预定义宏名称 [cpp.predefined] ( Emphasis Mine ):
因此,使用 C++17 时
__cplusplus
的值应为 201703L 。