Этот пример кода для Concepts TS на cppreference.com неправильный? - PullRequest
0 голосов
/ 08 апреля 2020

Код ниже взят из 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.

Is документация cppref не так?

1 Ответ

4 голосов
/ 08 апреля 2020

Сайт Cppreference документирует многие вещи в экосистеме C ++. Некоторые из этих вещей являются частью стандарта, а некоторые - частью технических спецификаций. Все последние имеют «экспериментальный» URL-адрес (и, очевидно, большое текстовое поле в верхней части страницы) и должны использоваться только при использовании рассматриваемого TS. В этом случае понятия TS, из которых была принята особенность языка C ++ 20.

У двух (Concepts TS и C ++ 20) есть достаточные различия, поэтому код, написанный для одного, крайне маловероятен быть совместимым с другим компилятором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...