Share via


/Zc:static_assert(严格 static_assert 处理)

编译器 /Zc:static_assert 选项告知编译器在分析类或函数模板时使用非依赖测试表达式评估 static_assert 调用。

语法

/Zc:static_assert
/Zc:static_assert-

备注

编译器 /Zc:static_assert 选项告知编译器在首次分析时评估函数模板正文或类模板成员函数正文中的 static_assert(如果使用的是非依赖测试表达式)。 如果非依赖测试表达式不为 false,编译器会立即发出错误。 如果是依赖性测试表达式,则在实例化模板之前,不会评估 static_assert

从 Visual Studio 2022 版本 17.1 开始,/Zc:static_assert 选项可用。 在早期版本的 Visual Studio 中,或者若指定了 /Zc:static_assert-,如果 static_assert 位于函数模板正文内或类模板成员函数正文内,则 Visual Studio 不会执行依赖分析。 相反,只会在实例化模板时评估 static_assert

/permissive- 选项启用 /Zc:static_assert,因此在使用 /std:c++20/std:c++latest 的项目中默认启用。 /Zc:static_assert- 选项必须位于命令行上的 /std:c++20/std:c++latest/permissive- 选项之后。

如果编译器处于默认 C++14 模式,且 /permissive-/Zc:static_assert 已指定,则使用 /Zc:static_assert 行为。 但是,如果在模板正文中评估 static_assert,则还会报告默认关闭的警告 C5254,“语言功能‘简要静态断言’需要编译器标志/std:c++17”,因为在 C++17 之前不需要此行为。

在 Visual Studio 中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. /Zc:static_assert/Zc:static_assert- 添加到“附加选项:”窗格中。

另请参阅

/Zc(一致性)