首页 > 后端开发 > C++ > 正文

未采用的'constexpr if”分支中的静态断言会发生什么?

DDD
发布: 2024-11-27 14:50:14
原创
722 人浏览过

What Happens to Static Assertions in Untaken `constexpr if` Branches?

失败 Constexpr if 块中的静态断言

简介

constexpr if 在 C 17 中引入允许更简洁和高效的代码。但是,它也引发了有关这些 if 块中 static_assert 语句处理的问题。

未采用分支中静态断言失败

标准文本指出 static_assert constexpr if 语句的非采取分支中的语句格式不正确。无论条件是否依赖,这都适用。

基本规则

此禁令基于一个完善的模板规则,该规则规定程序如果无法为模板生成有效的专业化,则 NDR 格式错误(无需诊断)。具有评估为 false 的非依赖条件的 Static_asserts 属于这一类。

对安全性和实用性的影响

此限制对 constexpr 的安全性和实用性产生了重大限制,如果。开发人员必须注意 if 语句的非采取分支中可能调用的任何潜在 static_assert。

示例

以下代码编译时不会出现警告,但被认为格式不正确:

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>(); 
}
登录后复制

范围规则

对 static_asserts 的禁止扩展到调用图,因此也禁止在非采取分支内调用可能包含 static_asserts 的任何函数。

结论

constexpr if 语句的非采用分支中 static_asserts 的失败突出显示了在模板中使用它们时需要仔细考虑。开发人员必须确保在 if 语句的非采取分支中不会尝试任何具有非依赖条件且计算结果为 false 的 static_asserts。

以上是未采用的'constexpr if”分支中的静态断言会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板