Compiler support for C++17
From cppreference.net
<
cpp
|
compiler support
*
- 별표로 표시된 셀 위에 마우스를 올리면
*
추가 팝업 노트를 볼 수 있습니다.
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 라이브러리 기능
|
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 를 참조하십시오.