And*_*zos 2 c++ static-assert constexpr c++20 if-constexpr
在以下 C++20 函数模板中:
template<int i>
void f() {
if constexpr (i == 1)
g();
else if constexpr (i == 2)
h();
else
??? // <--error
}
Run Code Online (Sandbox Code Playgroud)
有什么我们可以写的东西,???这样f<3>()在编译时调用就会失败?
问题是constexpr if被丢弃的语句对于每个可能的专业化都不能格式错误。[temp.res.general]/6
(强调我的)
可以在任何实例化之前检查模板的有效性。
程序格式错误,无需诊断,如果:
- 不能为模板中的模板或constexpr if语句的子语句生成有效的特化,并且模板未实例化,或
您可以使用始终为 的依赖于类型的表达式false。例如
template<int i> struct dependent_false : std::false_type {};
template<int i>
void f() {
if constexpr (i == 1)
g();
else if constexpr (i == 2)
h();
else
static_assert(dependent_false<i>::value, "Must be 1 or 2");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |