20

由于我正在开发一个将于 2014 年左右公开发布的 C++ 库,因此我目前需要做出设计选择。将与 C++14 一起发布的非常有用的工具之一是std::optional. 我想知道g++/libstdc++我可以使用哪个版本的-std=c++1y.

4

2 回答 2

19

更新(2016 年 10 月): std::optional不在最终的 C++14 标准中,因此它永远不会与-std=c++1y. 相反,GCC 4.9std::experimental::optional包含-std=c++1y.

GCC 7 将包含std::optional-std=c++1zC++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仅选择性地启用功能。

于 2013-06-09T20:44:49.187 回答
6

根据他们的libstdc++ 状态页面,GCC 7.1 是第一个std::optional没有隐藏的版本std::experimental,它支持__has_include(<optional>)功能测试。__cpp_lib_optional >= 201603GCC 7.3 中添加了功能测试。

于 2018-04-03T15:33:41.657 回答