Любой шанс использовать стандартную библиотеку #include <concepts>с Clang - PullRequest
0 голосов
/ 26 февраля 2020

На godbolt есть версия лязга под названием «x86-64 clang (экспериментальные концепции)», предоставляющая экспериментальные возможности концепции базового языка.

Есть ли способ использовать ( экспериментальная версия) стандартная библиотека реализации?

Было бы здорово иметь std::convertible_to и друзей, доступных для разработки концепций.

1 Ответ

0 голосов
/ 09 марта 2020

Мне кажется, что G CC немного впереди в реализации функций C ++ 20. Вы можете проверить в режиме онлайн , что следующий код выполняется с использованием G CC (транк):

#include <iostream>
#include <concepts>

template<typename T> concept scalar = std::is_scalar_v<T>;

template<typename T>
class Foo
{
public:
    Foo(T t) requires scalar<T>: _t{t} { std::cout << "is scalar" <<std::endl; }
    Foo(T t) requires (not scalar<T>): _t{t} { std::cout << "is not scalar" <<std::endl;}
private:
    T _t;
};

class cls {};

int main() 
{
    Foo{true};
    Foo{'d'};
    Foo{3.14159};
    cls c;
    Foo{c};

    return 0;
}
...