我已经在谷歌上搜索了好几个月,试图解决这个问题,但我没有尝试过。
所以这样一个简单的程序:
#include <concepts>
#include <iostream>
int main() {
std::cout << "Test" << std::endl;
return 0;
}无法使用错误消息fatal error: 'concepts' file not found进行编译。clang++和g++编译器都会发生这种情况。(完整性:clang++-11 -std=c++20 test.cpp和g++ -std=c++2a test.cpp.)
我的编译器版本是:
> clang++-11 --version
Ubuntu clang version 11.0.0-2~ubuntu20.04.1
> g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0如果我查找我的C++头,我可以在/usr/include/c++中找到它们
> find /usr -name "iostream"
/usr/lib/llvm-10/include/c++/v1/iostream
/usr/include/c++/9/iostream然而,find /usr -name "concepts"什么也没给。所以标题肯定丢失了。与所有其他特定于C++20的标头,以及在其他标头中定义的特定于C++20的函数一样(例如,[std::bit_width][1] --可以包含标头,但函数没有定义)。
顺便说一句,我可以使用所有的C++20功能。例如,我可以定义自己的概念,尽管我不能使用概念头。
奇怪的是,无论我在哪里搜索这类问题,我能找到的唯一问题就是使用不支持C++20的旧编译器的人,或者缺少所有C++头(或者编译器找不到它们)的人。但是,我不知道我应该做什么,因为我的编译器显然支持C++20,但是我忽略了C++20头。
我确实尝试过查看libstdc++是否需要更新,但没有结果:
> sudo apt install libc++-dev
[...]
libc++-dev is already the newest version (1:10.0-50~exp1).发布于 2021-09-03 22:59:19
因此,我需要安装g++版本10来获取所需的标头。我以为我有最新版本的所有东西,但我想我可能已经更新了gcc,而不是g++。对于任何有此问题的人,请确保再次检查您的g++ --version,而不是gcc --version,以防它们不同。
总之,以下几点解决了这个问题:
sudo apt install g++-10
https://stackoverflow.com/questions/69037873
复制相似问题