在 C + + 17中,这段代码是非法的:
constexpr int foo(int i) {
return std::integral_constant<int, i>::value;
}
这是因为即使可以在编译时计算 foo
,编译器仍然需要产生在运行时执行它的指令,从而使模板实例化成为不可能。
在 C + + 20中,我们将使用 consteval
函数,这些函数需要在编译时进行计算,因此应该删除运行时约束。这是否意味着这个代码将是合法的?
consteval int foo(int i) {
return std::integral_constant<int, i>::value;
}