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

How do I use concepts in if-constexpr?

如何使用 if constexpr 中的概念?

给出下面的例子,如果 T 满足 integral 的要求,那么给 if constexpr 给 return 1 什么,否则给 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>();
}

做就够了:

if constexpr ( integral<T> )

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

Concepts 在模板参数上被命名为 布尔值 谓词,在 编译时 .

评估

constexpr if 语句中,条件的值必须是 bool.

类型的上下文转换常量表达式

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

if constexpr ( integral<T> )