下面的代码摘自cppref
#include <string>
using namespace std::literals;
template<typename T>
concept bool EqualityComparable = requires(T a, T b)
{
{
a == b
}
->bool;
};
void f(EqualityComparable&&) {}
int main()
{
f("abc"s);
}然而,它不能用clang-10编译:
[root@mine ~]# clang++ -std=c++20 -stdlib=libc++ main.cpp
main.cpp:6:14: warning: ISO C++20 does not permit the 'bool' keyword after 'concept' [-Wconcepts-ts-compat]
concept bool EqualityComparable = requires(T a, T b)
~~~~~^
main.cpp:11:7: error: expected concept name with optional arguments
->bool;
^
main.cpp:14:8: error: unknown type name 'EqualityComparable'
void f(EqualityComparable&&) {}
^
1 warning and 2 errors generated.是cppref的文档错误吗?
发布于 2020-04-08 03:38:44
C++生态系统中的许多东西都是Cppreference站点的文档。其中有些是标准的一部分,有些是技术规范的一部分。后者在URL中都有“实验性”(很明显,在页面顶部有一个大的警告文本框),并且只应该在您使用有问题的TS时使用。在这种情况下,采用了C++20核心语言特性的概念TS。
这两种语言(概念TS和C++20)有足够的区别,即针对其中一种编写的代码不太可能与另一种编译器兼容。
https://stackoverflow.com/questions/61092861
复制相似问题