GCC 中 C++17 支持的状态如何?

What's the status of C++17 support in GCC?

本文关键字:状态 C++17 支持 GCC      更新时间:2023-10-16

Clang有一个很好的页面,描述了关于C++1z/C++17特性支持的项目状态(以及C++11和C++14,这是同一个页面(。

g++有一个关于C++14功能的页面,但我找不到任何关于C++17/C++1z的内容。这是正在进行中,但只是没有出现在网络上吗?对于版本5.0?

截至目前,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.

更新的最终答案:

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

感谢@JanVanDijk提供完整功能表的链接。

已经有了一些支持;以下两个摘要针对Clang的列表:

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

  • 从4.9开始支持函数参数的auto。该功能目前被认为是一种扩展,但已包含在概念提案中,并被称为"通用功能">
  • 自5.1.0起,默认情况下将忽略三角图
  • 自5.1.0起模板模板参数的typename
  • 自5.1.0以来直接列表初始化的新演绎规则
  • HEAD中没有消息的static_assert
  • HEAD中的u8字符文字
  • HEAD中命名空间或枚举器的属性

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

  • 折叠表达式
  • 嵌套的命名空间定义
  • 所有非类型模板参数的常量求值

关于libstdc++中库建议的实现状态,相应的手册有一个列表。

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

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