Я изучаю некоторые современные функции С++ 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){}
может сделать то, что я ожидал (в основном просто утиная печать). Интересно, я прав или есть разница?