【问题标题】:Is this sample code for Concepts TS on cppreference.com wrong?cppreference.com 上的 Concepts TS 示例代码是否错误?
【发布时间】:2020-04-08 03:26:37
【问题描述】:

以下代码摘自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的文档有错吗?

【问题讨论】:

  • 您正在查看 TS。 Here'sc++20 里有什么
  • 你能在这里找到答案吗stackoverflow.com/questions/60684179/…
  • 选择的答案很明确。
  • 不,不是。只是clang-10没有实现Concepts TS,clang-10实现了C++20的概念。
  • 我们甚至在那个页面上有一个很大的免责声明框...

标签: c++ clang standards c++20 c++-concepts


【解决方案1】:

Cppreference 站点记录了 C++ 生态系统中的许多内容。其中一些是标准的一部分,其中一些是技术规范的一部分。后者在 URL 中都有“实验性”(显然,页面顶部有一个大的警告文本框),并且只有在您使用有问题的 TS 时才应使用。在这种情况下,采用了 C++20 核心语言特性的概念 TS。

两者(概念 TS 和 C++20)有足够的差异,针对一个编写的代码极不可能与另一个编译器兼容。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多