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

时间:2019-02-07 12:32:07

标签: c++ c++-concepts c++20 if-constexpr

一个人如何使用if constexpr中的概念?

以下面的示例为例,如果if constexpr满足T的要求,而又返回0,则给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>();
}

2 个答案:

答案 0 :(得分:21)

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

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

因此,在这种情况下,用法很简单:

if constexpr ( integral<T> )

答案 1 :(得分:14)

这样做就足够了:

if constexpr ( integral<T> )

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