【发布时间】:2013-06-05 12:11:59
【问题描述】:
由于我正在开发一个将于 2014 年左右公开发布的 C++ 库,因此我目前需要做出设计选择。将与 C++14 一起发布的非常有用的工具之一是 std::optional。我想知道g++/libstdc++ 的哪个版本可以使用-std=c++1y。
【问题讨论】:
标签: c++ g++ libstdc++ optional c++14
由于我正在开发一个将于 2014 年左右公开发布的 C++ 库,因此我目前需要做出设计选择。将与 C++14 一起发布的非常有用的工具之一是 std::optional。我想知道g++/libstdc++ 的哪个版本可以使用-std=c++1y。
【问题讨论】:
标签: c++ g++ libstdc++ optional c++14
更新(2016 年 10 月): std::optional 不在最终的 C++14 标准中,因此它永远不会与 -std=c++1y 一起使用。相反,GCC 4.9 包含std::experimental::optional,它可与-std=c++1y 一起使用。
GCC 7 将包含 std::optional 和 -std=c++1z,即 C++17。
原始答案(2013 年 6 月):
目前未实现,请参阅http://gcc.gnu.org/ml/libstdc++/2013-06/msg00032.html 了解 GCC 主干中 C++14 功能的状态。
何时实施取决于某人何时自愿完成这项工作,因此无法预测。
我会预计它将为 GCC 4.9 完成,它应该在 C++14 标准之前不久发布,但不能保证。不过,它不太可能被添加到 GCC 4.8,因为它已经发布并且与 GCC 4.9(即 GCC 颠覆主干)不同,__cplusplus 宏对于 -std=c++11 和 -std=c++1y 具有相同的值,因此对于 GCC 4.8 来说没有办法仅选择性地启用 -std=c++1y 的功能。
【讨论】:
std::optional 在 gcc 中不起作用时,这是谷歌的热门话题!所以我很高兴在这里被问到并得到了回答。
std::optional 这样的东西,所以直到最近它才在任何编译器中工作。
根据他们的libstdc++ status page GCC 7.1 是第一个拥有std::optional 而没有隐藏在std::experimental 中的版本,它支持__has_include(<optional>) 功能测试。 GCC 7.3 中添加了功能测试__cpp_lib_optional >= 201603。
【讨论】: