std::optional在g++/libstdc++中的实现状态



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

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

,它可用于-std=c++1y

GCC 7将包括-std=c++1z std::optional,即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 subversion 主干(不同,__cplusplus宏对 -std=c++11-std=c++1y 具有相同的值,因此对于 GCC 4.8,无法有选择地仅为-std=c++1y启用功能。

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

最新更新