【发布时间】:2021-11-01 09:06:00
【问题描述】:
几个月来我一直在谷歌搜索试图解决这个问题,但我没有尝试过任何工作。
这样一个简单的程序:
#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).
【问题讨论】:
-
有一个很好的 feature test 程序(在示例区域中),您可以使用 C++20 编译和运行它,生成的程序会告诉您哪些 C++20 功能可用于您的特定编译器。 (许多编译器的 C++20 实现还没有 100% 完成。)
-
gcc 从版本 10 开始支持概念。
标签: c++ g++ clang++ ubuntu-20.04 libc++