Как использовать понятия в if-constexpr? - PullRequest
0 голосов
/ 07 февраля 2019

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

0 голосов
/ 07 февраля 2019

Концепции имеют имена логические предикаты для параметров шаблона, оцениваемые в время компиляции .

В constexpr if, значение условия должно быть контекстно-преобразованным константным выражением типа bool.

Так что в этом случае использование простое:

if constexpr ( integral<T> )
0 голосов
/ 07 февраля 2019

Достаточно сделать:

if constexpr ( integral<T> )

, поскольку integral<T> уже тестируется как bool

...