在升级到Ubuntu22.04附带的gcc-11之后,由于缺少一些标准库头文件,我开始获得新的编译器错误。而以前的gcc版本没有。
当我开始研究它时,我从移植到GCC 11页面中的“标题依赖项更改”部分了解到,由于标准本身中有一些新规范,这是一种新的行为。
现在,我的问题是:某个特定C++标准(即C++17)的实现是否会从一个gcc版本更改为另一个版本(即gcc-9和16-11)?我的意思是,如果我用不同的gcc版本构建,但又违背相同的C++标准版本(即-std=c++17),那么构建怎么会失败呢?
C++标准库的新要求--不包括库内部使用的其他标头--是C++17还是C++20的一部分?
克服了这一切.
我手动地将这些头文件包含在它们丢失的地方,并且构建刚刚成功。然而,当我使用不同的gcc版本构建特定的C++版本时,我希望行为是一致的。还是,我漏掉了什么?
发布于 2022-09-15 18:10:09
多亏了JaMiT便条,我才意识到GCC写的纸条弄错了。只有他们在GCC 11的时候改变了标准,而不是标准本身。
当您从那篇文章彻底阅读引用部分时,您可以看到这一点。
头依赖项更改 一些C++标准库标头已更改为不再包含库内部使用的其他标头。因此,使用标准库组件而不包括正确头的C++程序将不再编译。 以下标题在libstdc++中使用较少,在使用GCC 11编译时可能需要显式地包括在内: ( std::numeric_limits) ( std::unique_ptr,std::shared_ptr等)(用于性病::结对、std::tuple_size、std::index_sequence等)(用于命名空间std::this_thread的成员。)
https://stackoverflow.com/questions/73662884
复制相似问题