【问题标题】:Implementation status of std::optional in g++/libstdc++?g++/libstdc++中std::optional的实现状态?
【发布时间】:2013-06-05 12:11:59
【问题描述】:

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

【问题讨论】:

  • 我根据 C++14 标签 wiki 上链接到的 Meta 讨论将标签更改为 C++1y,这导致决定在最终草案标准发布之前不使用 c++14
  • 如果有人想使用参考实现,那就是here

标签: c++ g++ libstdc++ optional c++14


【解决方案1】:

更新(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 的功能。

【讨论】:

  • “为什么在 SO 上问这个” - 所以在 SO 上搜索答案的人会找到它!
  • 当我调查为什么std::optional 在 gcc 中不起作用时,这是谷歌的热门话题!所以我很高兴在这里被问到并得到了回答。
  • 如果这个问题是在 gcc-help 列表中被问到的,那将是最热门的。无论如何,直到昨天这个答案都是错误的,因为直到 C++17 才出现 std::optional 这样的东西,所以直到最近它才在任何编译器中工作。
  • 它只是让人们如此代表。在邮件列表上询问不会:p
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2012-12-17
    • 2019-09-29
    • 2019-02-19
    • 2018-03-02
    相关资源
    最近更新 更多