Как использовать понятия в if-constexpr?
Как использовать понятия в if constexpr
?
Учитывая приведенный ниже пример, что бы дать if constexpr
вернуть 1 в случае T
отвечает требованиям integral
а еще 0?
template<typename T>
concept integral = std::is_integral_v<T>;
struct X{};
template<typename T>
constexpr auto a () {
if constexpr (/* T is integral */) {
return 1;
}
else {
return 0;
}
}
int main () {
return a<X>();
}
2 ответа
Концепции называются логическими предикатами параметров шаблона, которые оцениваются во время компиляции.
В constexpr if
оператор, значение условия должно быть контекстно-преобразованным константным выражением типа bool
,
Так что в этом случае использование простое:
if constexpr ( integral<T> )
Достаточно сделать:
if constexpr ( integral<T> )
поскольку integral<T>
уже тестируется как bool