我如何在if-constexpr中使用概念?

kaw*_*ken 27 c++ c++-concepts c++20 if-constexpr

如何使用概念if constexpr

给出下面的例子,if constexpr如果T满足要求,则返回1 将给予integral什么?

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>();
}
Run Code Online (Sandbox Code Playgroud)

P.W*_*P.W 22

概念在模板参数上被命名为boolean谓词,在编译时进行评估.

constexprif语句中,条件的值必须是类型的上下文转换常量表达式bool.

所以在这种情况下,使用很简单:

if constexpr ( integral<T> )
Run Code Online (Sandbox Code Playgroud)


kaw*_*ken 15

这样就足够了:

if constexpr ( integral<T> )
Run Code Online (Sandbox Code Playgroud)

因为integral<T>已经可以测试了bool