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

Vin*_*ent 19 c++ g++ libstdc++ optional c++14

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

Jon*_*ely 19

更新(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 subversion主干)不同,__cplusplus宏具有相同的值-std=c++11,-std=c++1y因此对于GCC 4.8,没有办法-std=c++1y仅选择性地启用功能.

  • 当我调查为什么`std :: optional`在gcc中不起作用时,这是谷歌的热门话题!所以我很高兴在这里被问及回答. (6认同)
  • "为什么要问这个问题" - 所以在SO上搜索答案的人会找到它! (4认同)

Lev*_*son 6

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