失败的 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中文网其他相关文章!