Как использовать понятия в 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

Другие вопросы по тегам