[英]c++17 language extension and std:c++17 flag
我對 Visual Studio 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 標志可以解決這些問題,但為什么會有兩條不同的消息? 語言擴展和編譯器標志要求有什么區別?
我對這件事更感興趣,因為我正在使用 Unreal Engine 4.24 編寫游戲,我可以使用“if constexpr”,但即使使用相同的編譯器,我也不能使用“結構化綁定”。
為什么?
if constexpr
是來自 C++17 的非常有用的語言構造。 例如,在標准庫中實現許多優化非常方便。
因此,當 Visual Studio 15.3 最初實現if constexpr
時,即使在 C++14 模式下編譯時,它也被廣泛用於其標准庫實現中。 但是由於大部分代碼都在頭文件中,就編譯器而言,它是源代碼的一部分,這意味着您也可以使用它。 為此,他們使用來自 C++14 的if constexpr
發出警告而不是錯誤,這是他們在標題中使用#pragma
禁用的警告。
但是,盡管 MSVC 的文檔將其稱為警告,但編譯器仍將其作為錯誤發出,可以抑制。
因此,這兩個條件之間的措辭差異很可能if constexpr
“錯誤”被認為是“警告”這一事實,盡管默認情況下將其自身呈現為“錯誤”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.