首页  >  文章  >  后端开发  >  未采用的'if constexpr”块中失败的'static_assert”如何影响程序有效性?

未采用的'if constexpr”块中失败的'static_assert”如何影响程序有效性?

Barbara Streisand
Barbara Streisand原创
2024-11-27 04:17:09722浏览

How Does a Failed `static_assert` in an Untaken `if constexpr` Block Affect Program Validity?

失败的 static_assert 如何影响 if constexpr (false) 块?

if constexpr 的非采用分支内的 static_assert声明被视为格式不正确,无需诊断。这个结果源于 [temp.res]/8 中的规则,如果无法为 constexpr if 语句中的模板或子语句生成有效的特化,则认为程序格式错误。

在这种情况下对于 static_assert,如果条件是非相关的并且计算结果为 false,则无法为包含断言的模板生成有效的特化。即使没有采用分支,这也会使程序格式错误。

但是,具有依赖条件的 static_asserts 不受影响。如果条件对于至少一种类型可以计算为 true,则模板仍然有效。

示例

考虑以下代码:

template< typename T><
constexpr void other_library_foo(){
    static_assert(std::is_same<T,int>::value);
}

template<class T>
void g() {
  if constexpr (false)
    other_library_foo<T>(); 
}

int main(){
    g<float>();
    g<int>();
}

尽管 if constexpr 条件为 false,但代码仍然格式错误,因为 other_library_foo 中的 static_assert包含计算结果为 false 的非依赖条件。

以上是未采用的'if constexpr”块中失败的'static_assert”如何影响程序有效性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn