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