Namespaces
Variants

C++17

From cppreference.net

C++17은 C++14 마이너 버전 이후에 출시된 메이저 버전으로, 새로운 언어 및 라이브러리 기능을 도입했습니다. 이 표준은 2017년 12월에 공개되었습니다.

다음 기능들이 C++17에 통합되었습니다:

목차

폐기된 기능

제거된 기능
사용 중단된 기능

새로운 언어 기능

새로운 헤더

새로운 라이브러리 기능

유틸리티 타입

**번역 참고사항:** - 모든 C++ 관련 용어(std::tuple, std::apply 등)는 원문 그대로 유지 - HTML 태그와 속성은 번역하지 않음 - "deduction guides"와 "searchers"는 C++ 표준 용어이므로 번역하지 않음 - 일반 텍스트만 한국어로 번역

메모리 관리

컴파일 타임 프로그래밍

알고리즘

반복자와 컨테이너

Numerics

기타

결함 보고서

C++17에서 수정된 결함 보고서 (코어 290개, 라이브러리 363개)

컴파일러 지원

C++17 핵심 언어 기능

번역된 내용: - "attribute" → "속성" - "Yes" → "예" 주의사항: - HTML 태그와 속성은 그대로 유지 - ` ` 태그 내의 내용은 번역하지 않음 - C++ 관련 용어(fallthrough, P0188R1 등)는 번역하지 않음 - 숫자 값과 버전 정보는 원본 그대로 유지
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* 5.0 19.1 11.0 11.0 10.3 17.1.0
중첩 네임스페이스 정의 N4230 6 3.6 19.0 (Update 3)* 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* Yes 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* Yes 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
베이스 클래스를 갖는 Aggregate 클래스 ( 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
람다의 * 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* 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 P0003R5 7 4 19.12* 지원 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* 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::uncaught_exceptions(), FTM, N4259 등)와 HTML 태그, 속성, 코드는 원본 그대로 유지되었습니다. 번역된 내용: - "Logical operator type traits" → "논리 연산자 타입 트레이트" - "Yes" → "지원" - "N/A" → "해당 없음" - HTML 태그, 속성, 코드 관련 내용은 원본 그대로 유지 - C++ 전문 용어(traits, FTM 등)는 번역하지 않음 번역된 내용: - "Searchers" → "검색자" (C++ 표준 라이브러리의 Searchers를 한국어로 자연스럽게 표현) - "Feature-testing macro" → "기능 테스트 매크로" (표준 용어) - "Yes" → "예" - "N/A" → "해당 없음" - HTML 태그, 속성, ,
,  태그 내부 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(boyer_moore_searcher, FTM 등)는 번역하지 않음
변경된 부분: - "Splicing" → "스플라이싱" (C++ 용어로 그대로 번역) - "and" → "및" (전문적인 표현)
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)* 17.1.0 해당 없음 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 (Update 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)* Yes 17.1.0 N/A
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* 지원 17.1.0 해당 없음
수학적 특수 함수 ( 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 for std::reverse_iterator , std::move_iterator , std::array 및 범위 접근에 대한 constexpr 지원 ( 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* 17.1.1 해당 없음 10.3
std::string_view ( FTM ) * 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 N/A 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 에서 reference로 변경됨 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 N/A 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* N/A 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 (부분적)*
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 를 참조하십시오.

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

외부 링크

1. C++17 - 위키백과
2. 실제 동작하는 C++17 예제