一个人如何使用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>();
}
答案 0 :(得分:21)
Concepts在模板参数上被命名为 boolean 谓词,并在编译时进行评估。
在constexpr if
语句中,条件的值必须是类型为 bool
的上下文转换常量表达式。
因此,在这种情况下,用法很简单:
if constexpr ( integral<T> )
答案 1 :(得分:14)
这样做就足够了:
if constexpr ( integral<T> )
因为integral<T>
已经可以测试为bool