2017-04-26 60 views
1

我正在使用Visual Studio 2015 Update 3,而我的_MSVC_LANG被定義爲201402L,無論我是否提供/std:c++14作爲編譯器參數。_MSVC_LANG有哪些值?

_MSVC_LANG在晚期或早期版本的visual-C++中有其他值嗎?

+0

[This](https://blogs.msdn.microsoft.com/vcblog/2016/08/12/stl-fixes-in-vs-2015-update-3/)可能是你在找什麼。 – selbie

+1

/std:C++ 14是更新3的默認值,因此添加選項不會改變任何內容。沒有早期版本的宏,我們沒有時間機器來猜測更高版本。去嘗試一下。 –

回答

3

Visual Studio 2015之前,_MSVC_LANG宏不存在(在內部它們依賴於包含等效版本號的__cplusplus宏)。

在Visual Studio的yvals.h頭,你可以看到C++版本的宏邏輯(這是從Visual Studio 2017年15.3.3):

#ifndef _HAS_CXX17 
    #if defined(_MSVC_LANG) && !(defined(__EDG__) && defined(__clang__)) // TRANSITION, VSO#273681 
    #if _MSVC_LANG > 201402 
    #define _HAS_CXX17 1 
    #else /* _MSVC_LANG > 201402 */ 
    #define _HAS_CXX17 0 
    #endif /* _MSVC_LANG > 201402 */ 
    #else /* _MSVC_LANG etc. */ 
    #if __cplusplus > 201402 
    #define _HAS_CXX17 1 
    #else /* __cplusplus > 201402 */ 
    #define _HAS_CXX17 0 
    #endif /* __cplusplus > 201402 */ 
    #endif /* _MSVC_LANG etc. */ 
#endif /* _HAS_CXX17 */ 

預處理器定義_HAS_CXX17 & _HAS_CXX14控制列入STL功能。