我对Visual 2017 (15.9.11版)中的不同错误感到困惑:
'if constexpr' is a C++17 language extension和
language feature 'structured bindings' requires compiler flag '/std:c++17'我知道添加/std:c++17标志可以解决这些问题,但是为什么有两种不同的消息呢?语言扩展和编译器标志需求之间有什么区别?
我对这件事更感兴趣,因为我在虚幻引擎4.24中写了一个游戏,我可以使用‘constexpr',但我不能使用’结构化绑定‘,即使我使用的是同一个编译器。
为什么?
发布于 2020-06-05 14:10:37
if constexpr是来自C++17的一个非常有用的langauge构造,它非常方便地实现,例如,标准库中的许多优化。
因此,当VisualStudio15.3最初实现if constexpr时,即使在以C++14模式编译时,也可以在其标准库实现中广泛使用它。但是,由于大部分代码都在头中,就编译器而言,它是源代码的一部分,这意味着您也可以使用它。考虑到这一点,他们创建了来自C++14的警告而不是一个错误,这是一个警告,在他们的标题中禁用了#pragma的警告。
然而,尽管MSVC的文档称它是一个警告,但它是由编译器作为错误发出的,这是可以被抑制的。
因此,这两个条件之间的措词差异很可能是由于if constexpr“错误”被认为是一种“警告”这一事实,尽管在默认情况下它被称为“错误”。
https://stackoverflow.com/questions/62217082
复制相似问题