我正在使用Visual Studio 2015 Update 3,而我的_MSVC_LANG
被定义为201402L
,无论我是否提供/std:c++14
作为编译器参数。
_MSVC_LANG
在visual-c ++的后期或早期版本中是否有其他值?
答案 0 :(得分: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功能的包含。