Namespaces
Variants

Compiler support for C++17

From cppreference.net

* - 별표로 표시된 셀 위에 마우스를 올리면 * 추가 팝업 노트를 볼 수 있습니다.
DR nn - "DR" 뒤의 숫자 nn 는 결함 보고서가 적용되는 대상 C++ 개정판을 나타냅니다(예: DR20 → C++20).

C++17 핵심 언어 기능

C++17 기능

문서

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX
DR11: 직접 목록 초기화를 위한 새로운 auto 규칙 N3922 5 3.8 19.0 (2015)* 4.10.1 17.0 17.7 11.0 11.0 10.3 17.1.0
typename 템플릿 템플릿 매개변수에서의 typename N4051 5 3.5 19.0 (2015)* 지원 4.10.1 17.0 17.7 지원* 11.0 10.3 17.1.0
트라이그래프 제거 trigraphs N4086 5 3.5 16.0* Yes 5.0 19.1 11.0 11.0 10.3 17.1.0
중첩 네임스페이스 정의 N4230 6 3.6 19.0 (Update 3)* Yes 4.12 17.0 17.7 11.0 11.0 10.3 17.1.0
static_assert 메시지 없는  ( FTM ) * N3928 6 2.5 19.10* Yes 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
속성 네임스페이스 및 열거자용  ( FTM ) * ( FTM ) * N4266 4.9 (부분적)*
6
3.6 19.0 (2015)* 지원 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
u8 문자 리터럴 N4267 6 3.6 19.0 (2015)* 지원 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
모든 상수 템플릿 인자에 대해 상수 평가 허용  ( FTM ) * N4268 6 3.6 19.12* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
단항 폴드 표현식 및 빈 매개변수 팩 P0036R0 6 3.9 19.12* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
register 키워드의 사용 중단(deprecated) 제거 P0001R1 7 3.8 19.11* Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
사용 중단된 operator ++ ( bool ) 제거 P0002R1 7 3.8 19.11* Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
예외 명세를 타입 시스템의 일부로 지정  ( FTM ) * P0012R1 7 4 19.12* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
__has_include 전처리기 조건문에서 P0061R1 5 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
DR11: 상속 생성자 에 대한 새로운 명세 ( DR1941 등)  ( FTM ) * P0136R1 7 3.9 19.14* * 지원 6.1 19.1 11.0 11.0 10.3 17.1.0
베이스 클래스를 가진 집계 클래스 ( FTM ) * P0017R1 7 3.9 19.14* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
폴드 표현식 ( FTM ) * N4295 6 3.6 19.12* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
람다 캡처 of * this ( FTM ) * P0018R3 7 3.9 19.11* Yes 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
열거형의 직접 목록 초기화 P0138R2 7 3.9 19.11* 4.14 18.0 19.1 11.0 11.0 10.3 17.1.0
constexpr 람다 표현식 ( FTM ) * P0170R1 7 5 19.11* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
범위 기반 for에서 서로 다른 begin과 end 타입 range-based for ( FTM ) * P0184R0 6 3.9 19.10* Yes 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ fallthrough ]] 속성 P0188R1 7 3.9 19.10* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ nodiscard ]] 속성 P0189R1 7 3.9 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ maybe_unused ]] 속성 P0212R1 7 3.9 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
16진수 부동 소수점 리터럴 ( FTM ) * P0245R1 3.0 Yes 19.11* Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
반복 없이 속성 네임스페이스 사용 P0028R4 7 3.9 19.11* Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
과도 정렬된 데이터를 위한 동적 메모리 할당 ( FTM ) * P0035R4 7 4 19.12* 10.0.0* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
auto 타입을 갖는 상수 템플릿 매개변수  ( FTM ) * P0127R2 7 4 19.14* Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
보장된 copy elision ( FTM ) * P0135R1 7 4 19.13* Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
참조 멤버를 포함하는 클래스 객체의 교체 P0137R1 7 6 19.14* Yes 5.0 19.1 11.0 11.0 10.3 17.1.0
엄격한 표현식 평가 순서 P0145R3 7 4 19.14* Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
구조화된 바인딩 ( FTM ) * P0217R3 7 4 19.11* 4.14 19.0 18.1 11.0* 11.0 10.3 17.1.0
알 수 없는 attributes 무시 P0283R2 Yes 3.9 19.0 (2015)* Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
constexpr if 문  ( FTM ) * P0292R2 7 3.9 19.11* 지원 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
if switch 를 위한 초기화 구문 P0305R1 7 3.9 19.11* Yes 4.14 18.0 18.1 11.0 11.0 10.3 17.1.0
인라인 변수 ( FTM ) * P0386R2 7 3.9 19.12* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
dynamic exception specifications 제거 dynamic exception specifications P0003R5 7 4 19.12* Yes 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
using 선언에서의 팩 확장  ( FTM ) * P0195R2 7 4 19.14* Yes 5.0 19.0 19.1 11.0 11.0 10.3 17.1.0
DR98: 템플릿 템플릿 인자의 매칭이 호환 가능한 템플릿을 제외함  ( FTM ) * P0522R0 7 4 19.12* Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
클래스 템플릿 인수 추론 ( FTM ) * P0091R3 7 5 19.14* Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0


C++17 기능


논문
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX

C++17 라이브러리 기능

번역된 내용: - "Feature-testing macro" → "기능 테스트 매크로" - "Yes" → "지원" - "N/A" → "해당 없음" C++ 관련 용어(std::invoke, FTM, __cpp_lib_invoke 등)와 HTML 태그, 속성은 원본 그대로 유지되었습니다. 번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - "Update" → "업데이트" - "Yes" → "예" - "N/A" → "해당 없음" HTML 태그, 속성, C++ 관련 용어(std::as_const, FTM, P0007R1 등)는 원본 그대로 유지되었습니다. **번역 내용:** - "Splicing" → "스플라이싱" (C++ 컨테이너 연산 용어) - "and" → "및" (공식 문서 스타일) - HTML 태그, 속성, ` `, `
`, `` 내부 텍스트는 원본 유지
- C++ 관련 용어(Maps, Sets, FTM, P0083R3 등)는 번역하지 않음
- 모든 포맷팅과 태그 구조는 원본 그대로 보존
**번역된 내용:** - "and" → "및" - "Feature-testing macro" → "기능 테스트 매크로" - "Yes" → "예" - "N/A" → "해당 없음" **보존된 내용:** - 모든 HTML 태그와 속성 - ` `, `
`, `` 태그 내부의 텍스트 (해당 태그가 없으므로 적용되지 않음)
- C++ 관련 용어 (`std::gcd()`, `std::lcm()`, `FTM`, `__cpp_lib_gcd_lcm` 등)
- 문서 번호 및 버전 정보
번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - "Yes" → "지원" - "N/A" → "해당 없음" C++ 관련 용어(shared_ptr, weak_type, FTM 등)와 HTML 태그, 속성, 코드는 원본 그대로 유지되었습니다. 변경된 내용: - `Feature-testing macro:` → `기능 테스트 매크로:` - `Yes` → `예` - `N/A` → `해당 없음` C++ 관련 용어(std::scoped_lock, FTM, P0156R2 등)와 HTML 태그, 속성, 코드는 원본 그대로 유지되었습니다.
C++17 기능

문서

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
std::void_t ( FTM ) * N3911 6.1 3.6 19.0 (2015)* 지원 17.1.0 해당 없음 10.3
std::uncaught_exceptions() ( FTM ) * N4259 6.1 3.7 19.0 (2015)* 17.1.0 해당 없음 10.3
std::size() , std::empty() std::data() ( FTM ) * N4280 6 3.6 19.0 (2015)* 17.1.0 해당 없음 10.3
std::allocator_traits::is_always_equal , noexcept 정리 작업 ( FTM ) * N4258 6.1 3.7 19.0 (2015)* 17.1.0 N/A
std::invoke ( FTM ) * N4169 6.1 3.7 19.0 (2015)* 지원 17.1.0 해당 없음
std::map::try_emplace , std::map::insert_or_assign ( FTM ) * N4279 6.1 3.7 19.0 (2015)* 지원 17.1.0 해당 없음
std::unordered_map::try_emplace , std::unordered_map::insert_or_assign ( FTM ) * N4279 6.1 3.7 19.0 (2015)* 17.1.0 해당 없음
개선 std::pair std::tuple N4387 6.1 4 19.0 (Update 2)* Yes 17.1.0 N/A 10.3
std::bool_constant ( FTM ) * N4389 6.1 3.7 19.0 (2015)* 17.1.0 해당 없음 10.3
std::shared_mutex (비시간제)  ( FTM ) * N4508 6 3.7 19.0 (업데이트 2)* 17.1.0 해당 없음 10.3
std::forward_list , std::list , 및 std::vector 에 대한 최소 불완전 타입 지원 ( FTM ) * N4510 3.0 3.6 18.0* Yes 17.1.0 N/A
타입 트레이트 변수 템플릿  ( FTM ) * P0006R0 7.1 3.8 19.0 (Update 2)* 17.1.0 해당 없음 10.3
논리 연산자 타입 트레이트 ( FTM ) * P0013R1 6.1 3.8 19.0 (Update 2)* 지원 17.1.0 해당 없음 10.3
std::as_const ( FTM ) * P0007R1 7.1 3.8 19.0 (업데이트 2)* 17.1.0 해당 없음
std::chrono::duration std::chrono::time_point 를 위한 반올림 함수 ( FTM ) * P0092R1 7.1 3.8 19.0 (Update 2)* Yes 17.1.0 N/A
투명 std::owner_less ( std::owner_less<void> )  ( FTM ) * P0074R0 7.1 3.8 19.0 (Update 2)* 17.1.0 해당 없음
std::not_fn ( FTM ) * P0005R4
P0358R1
7.1 3.9 19.12* 지원 17.1.0 해당 없음 10.3
병렬 알고리즘 및 실행 정책 ( FTM ) * ( FTM ) * P0024R2 9* 17
(부분적)*
19.14* 18.0*
std::clamp() ( FTM ) * P0025R1 7 3.9 19.0 (업데이트 3)* 10.0.0* 17.1.0 해당 없음 10.3
(nothrow-)swappable 특성 ( FTM ) * P0185R1 7.1* 3.9 19.0 (Update 3)* 10.0.0* 17.1.0 N/A 10.3
다형적 메모리 리소스 ( FTM ) * P0220R1 9.1 16 19.13* 15.0.0* 17.1.1 N/A 10.3
std::apply ( FTM ) * P0220R1 7.1 16 19.13* 지원 17.1.0 해당 없음
검색기 ( FTM ) * P0220R1 7.1 16 19.13* 지원 17.1.0 해당 없음
std::sample ( FTM ) * P0220R1 7.1 16 19.13* Yes 17.1.0 N/A
수학 특수 함수 ( FTM ) * P0226R1 7 19.14* 17.1.1 N/A 10.3
constexpr std::addressof ( FTM ) * LWG2296 7.1 지원 19.0 (업데이트 3)* 17.1.0 해당 없음
constexpr 에 대한 지원 std::reverse_iterator , std::move_iterator , std::array 및 범위 접근 함수 ( FTM ) * P0031R0 7.1 4 19.11* Yes 17.1.0 N/A
constexpr std:: atomic < T > :: is_always_lock_free ( 기능 테스트 매크로 ) * P0152R1 7.1 3.9 19.11* 지원 17.1.0 해당 없음
std::enable_shared_from_this::weak_from_this ( FTM ) * P0033R1 7.1 3.9 19.12* 17.1.0 해당 없음
std::hypot 3인수 오버로드 ( FTM ) * P0030R1 7.1 3.9 19.14* Yes 17.1.0 N/A
std::byte ( FTM ) * P0298R3 7 5 19.11* Yes 17.1.1 N/A 10.3
std::string_view ( 기능 테스트 매크로 ) * N3921
P0220R1
P0254R2
P0403R1
7.1 4 19.10* (부분적)*
19.11* *
10.0.0* 17.1.0 해당 없음 10.3
std::any ( FTM ) * P0220R1
P0032R3
7.1 4 19.10* 10.0.0* 17.1.0 해당 없음 10.3
std::optional ( FTM ) * P0220R1 7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
C11 표준 라이브러리의 주요 부분 P0063R3 9.1 7 19.0 (2015)*
(부분적)*
10.0.0* 17.1.1 해당 없음
스플라이싱 Maps Sets ( FTM ) * P0083R3 7 8 19.12* 10.0.0* 17.1.1 N/A
일부 컨테이너 emplace * 함수들의 반환 타입이 void 에서 참조형으로 변경됨 P0084R2 7.1 4.0 19.11* Yes 17.1.0 N/A
std::variant ( FTM ) * P0088R3 7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
std::make_from_tuple() ( FTM ) * P0209R2 7.1 3.9 19.10* 17.1.0 해당 없음 10.3
std::has_unique_object_representations ( FTM ) * P0258R2 7.1 6 19.11* 지원 17.1.1 해당 없음 10.3
std::gcd() std::lcm() ( FTM ) * P0295R0 7 4 19.11* 17.1.0 해당 없음 10.3
CWG 이슈 1776 : 참조 멤버를 포함하는 클래스 객체의 교체 ( std::launder )  ( FTM ) * P0137R1 7.1 6 19.14* 지원 17.1.0 해당 없음
메모리 관리 도구 확장 ( FTM ) * P0040R3 7.1 4 19.11* 17.1.0 N/A
shared_ptr::weak_type ( FTM ) * P0163R0 7.1 3.9 19.10* 지원 17.1.0 해당 없음
기본 문자열 변환 : std:: to_chars / std:: from_chars ( FTM ) * P0067R5 8*
11
7*
14*
20*
19.14* *
19.24*
10.0.0* * 17.1.1* 해당 없음 10.3*
std::shared_ptr std::weak_ptr 의 배열 지원 P0414R2 7 11 19.12* 12.0.0* 17.1.1 N/A 10.3
std::chrono::duration std::chrono::time_point 의 모든 멤버 함수에 대한 Constexpr ( FTM ) * P0505R0 7.1 4 19.11* Yes 17.1.1 N/A
std:: shared_ptr < T [ ] > ( 기능 테스트 매크로 ) * P0497R0 7.1 11 19.12* 17.1.1 해당 없음
constexpr std::char_traits ( FTM ) * P0426R1 8.1 4 19.14* 지원 17.1.1 해당 없음
파일 시스템 라이브러리 ( std::filesystem )  ( FTM ) * P0218R1
P0219R1
8 7 19.14* 11.0.0* 17.1.1 N/A 10.3
하드웨어 간섭 크기 ( FTM ) * P0154R1 12.1 15 (partial)*
19
19.11* N/A 10.3
std::scoped_lock ( FTM ) * P0156R2 7 5 19.11* 17.1.1 해당 없음 10.3
std::is_aggregate ( FTM ) * LWG2911 7 5 19.15* 17.1.1 해당 없음 10.3
std::is_invocable , std::invoke_result ( FTM ) * P0604R0 7.1 지원 19.11* 지원 17.1.1 해당 없음
DR17: std::hash<std::filesystem::path> LWG3657 11.4 17 19.32* 해당 없음


C++17 기능


문서
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
참고 사항
  • 2020년 11월 20일 기준, Oracle Developer Studio의 최신 릴리스는 12.6 입니다. 해당 제품의 문서 에는 C++17에 대한 언급이 없습니다.
  • Cray 컴파일러는 11.0 이전 버전에서도 일부 기능을 지원했을 수 있습니다. 11.0 버전은 Clang의 파생 버전이 되어 기본 컴파일러의 모든 언어 기능 지원을 획득한 시점입니다. 자세한 내용은 Cray/HPE 문서 S-2179 를 참조하십시오.