Как использовать концепцию, чтобы ограничить имя типа числовым? Возможности С++ 20

Я изучаю некоторые современные функции С++ 20. Один из них — концепт. Я прочитал https://en.cppreference.com/w/cpp/language/constraints и https://www.modernescpp.com/index.php/defintion-of-concepts, чтобы получить несколько примеров для подражания.

На данный момент я хочу разработать концепцию, в которой я могу принимать только числовые типы данных. В традиционном методе можно использовать

template<typename NumericType,
        typename = typename std::enable_if<std::is_arithmetic<NumericType>::value,NumericType>::type>

как предложено в шаблоне класса для числовых типов

или можно также использовать static_assert() внутри определения класса/функции шаблона

static_assert(std::is_arithmetic<NumericType>::value, "NumericType must be numeric");

Мне интересно, каким должен быть синтаксис для понятия? На данный момент я делаю

template<typename NumericType>
concept Numeric = std::is_arithmetic<NumericType>::value ;

и найти это

template<Numeric T>
void f(T){}

может сделать то, что я ожидал (в основном просто утиная печать). Интересно, я прав или есть разница?


person Ethanabc    schedule 08.04.2021    source источник
comment
не уверен, в чем вопрос, но вы сделали то же самое, что и стандартные концепции, см., например: en.cppreference.com/w/cpp/concepts/floating_point (за исключением того, что они используют _v вместо ::value для экономии ввода)   -  person NoSenseEtAl    schedule 09.04.2021