
近期有人提出将 C++20 作为 GCC 编译器的默认 C++语言方言而不是 C++17,发现 GNU 编译器集合本身在 C++20 模式下存在构建问题。
与当前 GCC 编译器使用的默认 C++17 方言(GNU++17)相比,当尝试以 C++20 模式编译 GCC 时,它暴露出自身的一些问题。红帽编译器工程师 Jakub Jelinek 在 GCC 邮件列表上提供补丁以解决 GCC 中的 C++20 构建错误时指出:
“我尝试测试一个将 -std=gnu++17 C++ 默认切换到 -std=gnu++20 的补丁(稍后将发布),但在 GCC 自举过程中遇到了各种问题,我们的代码库尚未完全支持 C++20。
最常见的问题是不同枚举类型的枚举器之间的算术或位运算(或在测试套件中枚举器与浮点数之间),由于忘记在参数内部对 const 进行 const 限定而导致模糊的多重加载运算符 ==,以及 libcody 大部分时间仍停留在 C++ 并与 C++20 不兼容,C++20 引入了 char8_t 类型并使用它来表示 u8 字面量。”
以下补丁修复了我遇到的各种问题,对于 libcody 来说,这个补丁确保包含 cody.hh 的代码可以与-std=gnu++20 一起编译,libcody 本身我在另一个补丁中做了调整。”
这项工作目前正在 gcc-patches 列表上。

这个补丁同时是提议将 GCC 默认的 C++方言改为 C++20/GNU++20 的提案。考虑到明天预计将进入其”阶段三”开发里程碑,是否会在下一次 GCC 16 编译器发布中实现这一点还有待观察。
转自 GCC Developer Discovers “Our Codebase Isn’t Fully C++20 Ready” – Phoronix
Linuxeden开源社区