기존에 포스팅했던 게시물의 업그레이드 버전
https://static-jsony.tistory.com/88
#if defined( __cplusplus ) && defined( _MSC_VER )
# if __cplusplus >= 201703L && _MSC_VER >= 1914
// C++ 17 이상 / VS 2017 15.7 (MSVC++ 14.14)부터 C++17 코어 기능 지원
# define __CPX_HAS_CXX17 1
# endif
# if __cplusplus >= 201402L && _MSC_VER >= 1910
// C++ 14 이상 / VS 2017 15.0 (MSVC++ 14.1)부터 C++14 코어 기능 지원
# define __CPX_HAS_CXX14 1
# endif
# if __cplusplus >= 201103L && _MSC_VER >= 1900
// C++ 11 이상 / VS 2015 14.0(MSVC++ 14.0)부터 C++11 지원
# define __CPX_HAS_CXX11 1
# endif
# if __cplusplus >= 199711L && _MSC_VER >= 1400
# define __CPX_HAS_CXX98 1
# endif
#else
# error c++ compiler required.
#endif
사용 예시
#if !defined( __CPX_HAS_CXX11 )
# define __NOEXCEPT throw( )
#else
# define __NOEXCEPT noexcept
#endif
※ __cplusplus매크로가 '199711L'만 반환하는 경우
프로젝트 속성 - C/C++ - 명령줄의 추가옵션 에 /Zc:__cplusplus를 추가한다.
C++ 버전별 컴파일러가 지원하는 기능 리스트
https://en.cppreference.com/w/cpp/compiler_support
사실상 Visual studio 2015 이후에서는, 크게 필요 없는 구분법
( C++11이 지원이 안되는 VS버전 때문에 어쩔 수 없이 사용 )
현재 본인이 사용 중인 Visual studio 2017에서는 yvals_core.h에서
_MSVC_LANG의 버전에 따라
#define _HAS_CXX17 1
혹은
#define _HAS_CXX17 0
로 정의된다.
'Programming > C & C++' 카테고리의 다른 글
warning C4603 & error C1020 : 매크로가 정의되지 않았거나 미리 컴파일된 헤더 사용 후와 정의가 다릅니다. (0) | 2023.12.15 |
---|---|
Detecting Memory Leaks with std::nothrow (0) | 2023.11.21 |
Visual Studio 2017 - 솔루션 탐색기에서 '외부종속성' 필터 삭제하기 (0) | 2021.09.02 |
C++ 특정 부분 컴파일러 경고 뜨지 않게 하는 방법. (0) | 2021.02.19 |
Visual Studio 2005 검색 시 두 줄씩 검색되는 버그 (0) | 2020.08.04 |