为啥“if constexpr”不能与 Visual Studio 2017 15.3 一起编译?
Posted
技术标签:
【中文标题】为啥“if constexpr”不能与 Visual Studio 2017 15.3 一起编译?【英文标题】: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 建议使用它...
【参考方案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)"
,则此选项可用。以上是关于为啥“if constexpr”不能与 Visual Studio 2017 15.3 一起编译?的主要内容,如果未能解决你的问题,请参考以下文章
win10 64位 python3.6 django1.11 MysqlDB No module named 'MySQLdb' 安装MysqlDB报错 Microsoft Visua
为啥 NSFileManager 不能与 UIDocumentBrowserViewController 一起使用?