【问题标题】:Why does "if constexpr" not compile with Visual Studio 2017 15.3?为什么“if constexpr”不能与 Visual Studio 2017 15.3 一起编译?
【发布时间】:2017-09-06 00:35:04
【问题描述】:

根据以下文档:C++17 Features In Visual Studio 2017 Version 15.3 Preview,C++17 引入的 if constexpr 语法应与 /std:c++14 编译器开关一起使用。

但是,它不起作用。相反,会生成以下编译器错误:

错误 C4984:'if constexpr' 是 C++17 语言扩展

文档有误吗?

如果是这样,if constexpr 如何在 Visual Studio 2017 15.3 中编译?

【问题讨论】:

  • 它说它支持它,它没有声称它在/std:c++14 下得到支持;事实上,它明确将其列为 C++17 功能,那么当您要求使用较旧的标准时,您为什么会期望它呢?
  • 它说:“[F] 在 /std:c++14 下受支持,带有“警告 C4984:...”,请参阅表下方的参考 [F]。
  • @AlexeyVoytenko:它给你一个 C4984 的“错误”而不是一个“警告”这一事实是否让你认为也许你编译时带有警告作为错误?
  • @NicolBolas 我使用默认设置测试了项目,其中“警告作为错误”已关闭 (/WX-)。
  • 呃,他们仍然默认不支持,即使警告级别 4 建议使用它...

标签: c++ visual-studio-2017 c++17


【解决方案1】:

看起来问题中链接的文档在这里不准确。

要在 Visual Studio 2017 中使用 if constexpr,您需要使用 /std:c++17/std:c++latest 开关进行编译。

【讨论】:

  • 我试过了,但使用 if constexpr (std::is_same< T, stuff>::value) { thingthatbuilds; } else {thingthatdoesnt; } 失败,并在 else 部分出现...构建错误。
  • 你可以通过 VS2017 UI 找到这个选项:Project Properties -> Configuration Properties -> C/C++ -> Language -> C++ Language Standard 并选择 "ISO C++17 Standard"。如果 Project Properties -> Configuration Properties -> General -> Platform Toolset 设置为 "Visual Studio 2017 (v141)""Visual Studio 2017 - Windows XP (v141_xp)",则此选项可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2017-07-30
相关资源
最近更新 更多