【问题标题】:What's the status of C++17 support in GCC?GCC 对 C++17 的支持情况如何?
【发布时间】:2015-09-22 16:13:53
【问题描述】:

Clang 有一个 nice page 描述项目状态 w.r.t。 C++1z/C++17 特性支持(和 C++11 和 C++14 是同一页)。

g++ 有a page regarding C++14 features,但我找不到任何关于 C++17/C++1z 的信息。是否正在处理但只是没有出现在网络上?对于 5.0 版?

【问题讨论】:

标签: c++ gcc clang++


【解决方案1】:

截至今天,gcc 的 C++1z 语言支持在以下位置进行跟踪:https://gcc.gnu.org/projects/cxx1z.html。 libstdc++的C++1z状态见https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.201z

【讨论】:

    【解决方案2】:

    更新的最终简答:

    • GCC 8.x(及更高版本)完全支持所有 C++17。
    • GCC 7.x 支持所有 C++17,但类模板参数推导除外。
    • GCC 6.x(及更早版本)很少或根本不支持 C++17 功能。

    感谢@JanVanDijk 提供link to the full feature table

    【讨论】:

    • gcc 中的支持仍列为实验性manual 也暗示了这一点。 gcc 9 包括用于 c++17 的 improved experimental support
    • 您链接到的手册说“GCC 支持新规范中的所有更改。”在该页面上找不到“实验性”一词。
    • 确实如此,但随后要了解更多信息的链接表明支持是实验性的。另外,手册的第一行只说 GCC 支持 1998 年发布的原始 ISO C++ 标准,以及 2011 年和 2014 年的修订版
    【解决方案3】:

    已经有一些支持了;以下两个总结面向 Clang 的列表:

    支持(截至 2015 年 7 月 5 日):

    • 支持auto 函数参数since 4.9。此功能目前被视为扩展,但包含在概念提案中并称为“通用功能”。
    • 默认情况下忽略三元组since 5.1.0
    • typename 用于模板模板参数 since 5.1.0
    • 直接列表初始化的新推导规则since 5.1.0
    • static_assert 没有消息in HEAD
    • u8 字符文字 in HEAD
    • 命名空间或枚举器的属性in HEAD

    不支持(截至 2015 年 7 月 5 日;带有指向有效示例用法的链接):

    关于 libstdc++ 中库提案的执行情况,the corresponding manual 有一个列表。

    【讨论】:

    • “函数参数自动”这是什么?我在C++17 列表中找不到这个。
    • Trigraphs 并不是真正的问题。如果您需要它们,您可以随时将它们定义为系统源编码的一部分。
    • @Suma: "auto for function parameters" 是 C++14: stackoverflow.com/questions/17233547/…(而显示的示例可能是 gcc 扩展)。
    • @Thomas 不。它是 C++17 计划功能的一部分; “通用函数”,概念文件的一部分。泛型 lambda 确实是 C++14。
    • @Columbo:从 4.9 开始,这必须是扩展。见stackoverflow.com/a/25879737。您在 C++14 模式下编译,GCC 4.9 甚至无法识别 -std=c++1z
    【解决方案4】:

    cppreference.com 上还有一个不错的表格,列出了多个编译器支持的功能。

    http://en.cppreference.com/w/cpp/compiler_support

    【讨论】:

    猜你喜欢
    • 2019-07-16
    • 2020-02-21
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2014-08-25
    相关资源
    最近更新 更多