Namespaces
Variants

C++ compiler support

From cppreference.net


다음 표들은 새로운 C++ 기능에 대한 컴파일러 지원을 제시합니다. 여기에는 표준에 대한 승인된 개정 사항과 다양한 기술 사양이 포함됩니다:

목차

참고 사항

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

C++26 기능

C++26/2c 표준 초안이 발전함에 따라 이 목록은 변경될 수 있습니다.

C++26 핵심 언어 기능

번역 시 주의사항: - HTML 태그와 속성은 그대로 유지 - `FTM`, `P2841R7`, `__cpp_template_parameters = 202502L` 등 C++ 관련 용어는 번역하지 않음 - "Concept and variable-template template-parameters"는 C++ 전문 용어로 "개념 및 변수 템플릿 템플릿 매개변수"로 정확히 번역 - "Feature-testing macro"는 "기능 테스트 매크로"로 전문적으로 번역 **변역 설명:** - "Trivial unions" → "트리비얼 유니언" (C++ 용어는 번역하지 않고 음차 표기) - HTML 태그, 속성, 링크, FTM, P3074R7 등은 그대로 유지 - 모든 태그 구조와 스타일 속성은 원본 그대로 보존 - 특수 문자(공백, 괄호 등)도 원본 형식 유지 **번역 설명:** - "Contracts" → "계약" (C++ Contracts 기능의 표준 번역어) - "Feature-testing macro" → "기능 테스트 매크로" (기술 문서에서 일반적으로 사용되는 용어) - FTM, P2900R14, __cpp_contracts 등 C++ 관련 용어와 코드는 원문 유지 - 모든 HTML 태그와 속성, 구조는 완전히 보존 - title 속성 내의 텍스트도 적절히 번역하면서 기술적 정확성 유지
C++26 기능

문서

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
DR98: 렉싱에서 정의되지 않은 동작 제거 P2621R3 3.3 16.0.0*
DR98: 인코딩 불가능한 문자열 리터럴을 비정형으로 만들기 P1854R4 14 14 16.0.0*
평가되지 않은 문자열 P2361R6 14 17 (부분적)*
18
16.0.0*
기본 문자 집합에 @ , $ , 그리고 ` 추가 기본 문자 집합 P2558R2 15 Yes 16.0.0*
constexpr void*로부터의 캐스트 void * ( FTM ) * P2738R1 14 17
DR20: 표준 속성의 무시 가능성에 관하여 P2552R3 15
DR11: 중괄호 초기화자를 위한 정적 저장소 P2752R3 14
사용자 생성 static_assert 메시지  ( FTM ) * P2741R3 14 17
이름 없는 플레이스홀더 변수 ( FTM ) * P2169R4 14 18
팩 인덱싱 ( FTM ) * P2662R3 15 19
사용 중단된 열거형 산술 변환 제거 P2864R2 14 18
DR11/20: 템플릿 매개변수 초기화 P2308R1 9 18
반환된 참조를 임시 객체 에 바인딩하는 것을 금지 P2748R5 14 19
구조적 바인딩을 위한 속성 ( FTM ) * P0609R3 15 19
초기화되지 않은 읽기에 대한 오류 동작, [[ indeterminate ]] 속성 P2795R5
= delete ( "reason" ) ; ( 기능 테스트 매크로 ) * P2573R2 15 19
Variadic friends ( FTM ) * P2893R3 15 20
DR98: 집계 초기화 에서 중괄호 생략 규칙 명확화 P3106R1 17
DR20: 모듈 선언을 매크로로 허용하지 않음 P3034R1 15
DR11: 사소한 무한 루프는 정의되지 않은 동작이 아님 P2809R3 14 19
constexpr 배치 new  ( FTM ) * ( FTM ) * P2747R2 15 20
구조화된 바인딩 선언을 조건으로 사용  ( FTM ) * P0963R3 15 6 (부분적)*
21
제약 조건 의 순서 지정 ( 폴드 표현식 포함) ( FTM ) * P2963R3 19
불완전한 타입에 대한 포인터 삭제는 올바르지 않은 형식이어야 함 P3144R2 15 19 6.7
구조화된 바인딩 을 도입할 수 있음 ( FTM ) * P1061R10 21
constexpr 구조적 바인딩 constexpr 변수에 대한 참조 P2686R5 6.7
constexpr 예외 : [1] , [2] ( FTM ) * P3068R6
옥스퍼드 가변 쉼표 P3176R1 15 20
사용 중단된 배열 비교 제거 P2865R6 15 20
#embed ( FTM ) * P1967R14 15 19 *
개념 및 변수 템플릿 템플릿 매개변수  ( FTM ) * P2841R7
단순 재배치 가능성 ( FTM ) * P2786R13 21 *
트리비얼 유니언  ( FTM ) * P3074R7
관찰 가능 체크포인트 P1494R5
계약 ( FTM ) * P2900R14


C++26 기능


문서
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray

C++26 라이브러리 기능

**번역 결과:** **번역 설명:** - HTML 태그와 속성은 그대로 유지 - ` `, `
`, `` 태그 내부가 없으므로 해당 사항 없음
- C++ 관련 용어(Read-Copy Update, FTM, P2545R4 등)는 번역하지 않음
- "Feature-testing macro"만 "기능 테스트 매크로"로 정확하게 번역
- 전문적인 기술 문서 번역에 적합한 정밀한 번역 적용
**번역 결과:** - 모든 HTML 태그와 속성은 원본 그대로 유지됨 - `std::is_within_lifetime`, `FTM`, `P2641R4` 등 C++ 관련 용어는 번역하지 않음 - ` `, `
`, `` 태그 내부 내용이 없으므로 해당 사항 없음
- HTML 구조와 서식이 완전히 보존됨
**번역 결과:** - HTML 태그와 속성은 그대로 유지 - ` `, `
`, `` 태그 내부 텍스트가 없으므로 해당 없음
- C++ 관련 용어(std::atomic_ref::address(), FTM, P2835R7, __cpp_lib_atomic_ref)는 번역하지 않음
- 특수 기호와 포맷팅은 원본 그대로 보존
**번역 결과:** - 모든 HTML 태그와 속성은 그대로 유지됨 - ` `, `
`, `` 태그 내부 텍스트가 없으므로 해당 사항 없음
- C++ 관련 용어(std::indirect, FTM, __cpp_lib_indirect, P3019R14)는 번역하지 않음
- HTML 구조와 서식이 완전히 보존됨
C++26 기능

문서

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
<charconv> 함수의 성공 또는 실패 테스트  ( FTM ) * P2497R0 14 18 16.0.0*
std::text_encoding : 텍스트 인코딩 식별  ( FTM ) * P1885R12
P2862R1
14
std::to_string std::to_wstring 의 산술 연산자 오버로드가 std::format 을 사용함 ( FTM ) * P2587R3 14
형식 검사 포맷 인수  ( FTM ) * P2757R3 15
포인터 서식 지정  ( FTM ) * P2510R3 14 * 17 * 19.40* *
해싱 지원 for std::chrono 값 클래스들  ( FTM ) * P2592R3
<rcu> : Read-Copy Update ( FTM ) * P2545R4
<rcu> : Read-Copy Update ( FTM ) * P2545R4
<hazard_pointer> : Hazard pointers ( FTM ) * P2530R3
ADL-proof std::projected P2538R1 14 * 18 * 19.38* * 16.0.0*
constexpr 안정 정렬 ( FTM ) * P2562R1 15 21
멤버 함수 std::basic_format_arg::visit() ( FTM ) * P2637R3 15 19
멤버 함수 std::variant::visit() ( FTM ) * P2637R3 15 18
std::is_within_lifetime ( FTM ) * P2641R4
연관 컨테이너에 나머지 이종(heterogeneous) 오버로드 확장  ( FTM ) * P2363R5
비정렬 연관 컨테이너에서 std::weak_ptr 를 키로 사용할 수 있도록 함  ( FTM ) * P1901R2
파일 스트림의 네이티브 핸들  ( FTM ) * P1759R6 14 18 16.0.0*
문자열 스트림과 std::string_view 연동 ( FTM ) * P2495R3 19
std::bitset std::string_view 인터페이싱 ( FTM ) * P2697R1 18 16.0.0*
<cmath> <complex> 에 대한 추가 constexpr ( FTM ) * ( FTM ) * P1383R2 4.6 (부분적)*
비율에 새로운 2022 SI 접두어 추가: std::quecto , std::ronto , std::ronna , 및 std::quetta ( FTM ) * P2734R0 14 17 *
std::function_ref : 타입 삭제된 호출 가능 참조  ( FTM ) * P0792R14
std::copyable_function ( FTM ) * P2548R6 16
std::bind_front , std::bind_back , 그리고 std::not_fn 를 NTTP 호출 가능 객체에 적용 가능  ( FTM ) * ( FTM ) * ( FTM ) * P2714R1
std::submdspan() ( FTM ) * P2630R4
P3355R1
독립형 언어: 선택적 ::operator new P2013R5 N/A
독립 실행 환경 std::char_traits , std::errc 및 다음 헤더의 기능들: <charconv> , <cstdlib> , <cstring> , <cwchar> ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P2338R4 N/A
추가 독립 실행 환경 기능들  ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P2198R7 해당 없음
포화 산술 ( FTM ) * P0543R3 14 18 16.0.0*
<debugging> : 디버깅 지원 ( FTM ) * P2546R5
P2810R4
<linalg> : BLAS 기반의 자유 함수 선형 대수 인터페이스 ( FTM ) * P1673R13
P3050R2
P3222R0
assert() 매크로 사용자 친화적으로 만들기 P2264R7
런타임 형식 문자열  ( FTM ) * P2918R2 14 18 16.0.0*
std::span 이니셜라이저 리스트에 대한  ( FTM ) * P2447R6 15 18 16.0.0*
std::span::at() ( FTM ) * P2821R5 14 18 16.0.0*
std::complex 에 튜플 프로토콜 추가됨 ( FTM ) * P2819R2 15 19
std::generate_canonical 에 대한 새로운 명세 P0952R2 19.42*
사용 중단된 typedef std::allocator::is_always_equal 제거 P2868R3 15 18 16.0.0*
인수를 받지 않는 std::basic_string::reserve() 함수 오버로드 제거 P2870R3 18 16.0.0*
사용 중단된 유니코드 변환 패싯 제거 ( <codecvt> ) P2871R3 18 16.0.0*
독립형: std::strtok 제거 ( FTM ) * P2937R0 14 19.40*
독립형 라이브러리: 부분 클래스들  ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P2407R5 14 19.42*
독립형 라이브러리: std::inout , std::expected , std::span ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P2833R2 14 19.42*
DR23: std::basic_const_iterator 는 해당 기본 타입의 변환 가능성을 따라야 함  ( FTM ) * P2836R1
P2950R0
14 19.40*
DR20: std::make_format_args 이제 전달 참조 대신 좌측값 참조만 수용합니다 P2905R2 14 18 19.40* 16.0.0*
DR20: 코드 유닛을 정수로 포맷팅하는 문제 수정  ( FTM ) * P2909R4 13.3 18 19.40* 16.0.0*
views::concat ( FTM ) * P2542R8 15
문자열과 문자열 string view 연결 ( FTM ) * P2591R5 15 19
알고리즘에 대한 목록 초기화 활성화 algorithms ( FTM ) * P2248R8
P3217R0
15
std::ranges::generate_random ( FTM ) * P1068R11
비교 연산자 for std::reference_wrapper , and constraints for comparisons of std::pair , std::tuple , std::optional , and std::variant ( FTM ) * ( FTM ) * P2944R3 14 19 (부분적) *
패딩된 mdspan 레이아웃  ( FTM ) * P2642R6
정수 상수를 사용한 std::span std::mdspan 에 대한 새로운 CTAD P3029R1 19
원자적 최댓값 및 최솟값  ( FTM ) * P0493R5
std::formatter<std::filesystem::path> ( FTM ) * P2845R8
std::println() 로 빈 줄 출력하기 ( FTM ) * P3142R0 14 * 19 * 19.41* *
비사용 중단화 std::polymorphic_allocator::destroy P2875R4 15 19.41*
사용 중단된 strstreams 제거 P2867R2 19
사용 중단된 std::shared_ptr 원자적 접근 API 제거 P2869R4
제거 중 std::wstring_convert P2872R3 19
DR23: 효율적인 구현을 허용하는 std::print ( FTM ) * P3107R5
P3235R3
19.43*
실행 제어 라이브러리 ( FTM ) * P2300R10
P3396R0
std::inplace_vector : 고정된 용량을 가진 동적으로 크기 조정 가능한 벡터  ( FTM ) * P0843R14
std::philox_engine : 카운터 기반 난수 엔진  ( FTM ) * P2075R6
std::optional 범위 지원  ( FTM ) * P3168R2
std::is_virtual_base_of : 가상 기본 클래스 검출을 위한 타입 특성  ( FTM ) * P2985R0 15 20
std::dims for std::mdspan ( FTM ) * P2389R2 19
DR11: std::ignore 의 타입에 대한 공식 명세 P2968R2 15 19 19.42*
DR20: 간접 호출 가능 개념들에서 공통 참조 요구사항 제거  ( FTM ) * P2997R1 15 19 19.42*
std::is_trivial std::is_trivial_v 사용 중단 P3247R2 15 21
DR20: 알고리즘 함수 객체 P3136R1 Yes 14 19.39* 14.0.3*
std::ranges::cache_latest_view ( FTM ) * P3138R5 15
std::expected 동등 연산자 제약 ( FTM ) * P3379R0 15
std::aligned_accessor : 포인터 초과 정렬을 표현하는 std::mdspan 액세서  ( FTM ) * P2897R7 21
std::is_sufficiently_aligned : 포인터의 정렬 사전 조건을 검사함 ( FTM ) * P2897R7 21
std::atomic_ref::address() ( FTM ) * P2835R7
DR11/20: std::atomic std::atomic_ref 에서의 cv 한정 타입 P3323R1 19.44*
constexpr std::atomic std::atomic_ref ( FTM ) * P3309R3
constexpr 특수화된 메모리 알고리즘 에 대한 ( FTM ) * P3508R0
P3369R0
15
<stdbit.h> <stdckdint.h> P3370R1 15
<simd> : 데이터 병렬 타입 ( FTM ) * ( FTM ) * P1928R15
P3430R3
P3441R2
P3287R3
P2663R7
P2933R4
실행 환경 을 생성하기 위한 유틸리티 P3325R5
constexpr 예외 타입에 대한 constexpr 지원, 예를 들어 std::bad_alloc , std::bad_cast 등.  ( FTM ) * P3068R6
P3378R2
사소한 재배치 가능성 특성과 연산  ( FTM ) * P2786R13
무력화 및 사용 중단 std::memory_order::consume P3475R1
std::monostate <utility> 에 추가 P0472R3 15 21 19.50*
std::indirect ( FTM ) * P3019R14
std::polymorphic ( FTM ) * P3019R14
추가 constexpr 컨테이너 및 컨테이너 어댑터 지원:

std::deque , std::flat_map , std::flat_multimap , std::flat_set , std::flat_multiset , std::forward_list , std::list , std::map , std::multimap , std::queue , std::priority_queue , std::set , std::multiset , std::stack , std::unordered_map , std::unordered_multimap , std::unordered_set , 및 std::unordered_multiset
( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) *

P3372R3
constexpr std::inplace_vector 비트리비얼(trivial) 타입을 위한  ( FTM ) * P3074R7
std::ranges::to_input_view ( FTM ) * P3137R3 15
std::ranges::approximately_sized_range std::ranges::reserve_hint ( FTM ) * P2846R6
<hive> : 삭제된 요소의 메모리 위치를 재사용하는 버킷 기반 컨테이너 ( FTM ) * P0447R28
<contracts> : 계약 위반 처리 지원  ( FTM ) * P2900R14
표준 라이브러리 강화  ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P3471R4 15 (부분적)* 19.44* (부분적)*
독립형 라이브러리: <algorithm> , <numeric> , <random> , ( <execution> , <memory> )
( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) *
P2976R1
DR20: 연속 반복자를 포인터로 변환 P3349R0 15


C++26 기능


문서
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

C++23 기능

C++23 핵심 언어 기능

C++23 기능

문서

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
리터럴 접미사 (부호 있는) size_t 용 ( FTM ) * P0330R8 11 13 19.43* 13.1.6* 6.5 2022.2 23.9
() 람다 에 대해 더 선택적으로 만들기 P1102R2 11 13 19.44* 13.1.6* 6.3 2022.2 22.5
if consteval ( FTM ) * P1938R3 12 14 19.44* 14.0.0* 6.3 2022.2 24.1
가비지 컬렉션 지원 제거 P2186R2 12 N/A 19.30* N/A N/A
static_assert constexpr if 내 축소 문맥 변환 P1401R5 9 13 (부분)*
14
14.0.0* 2022.2 20.7
줄 접합 전 공백 제거 P2223R2 Yes Yes Yes 6.7 2022.2 Yes
선언 순서 레이아웃을 의무화 P1847R4 Yes Yes Yes Yes 2022.2 Yes
혼합 와이드 문자열 리터럴 제거 concatenation P2201R1 Yes Yes Yes Yes Yes Yes Yes
명시적 객체 멤버 함수 (this 추론 this )  ( FTM ) * P0847R7 14 18
19*
19.32*
(부분적)*
19.43*
6.3 22.5
auto(x) auto{x} ( FTM ) * P0849R8 12 15 14.0.3* 6.4 2022.2 23.3
#elifdef #elifndef P2334R1 12 13 19.40* 13.1.6* 6.5 2022.2 23.9
constexpr 함수에서 비 리터럴 변수 (및 레이블과 goto) 허용  ( FTM ) * P2242R3 12 15 19.43* 14.0.3* 6.3 2022.2 22.5
일관된 문자 리터럴 인코딩 P2316R2 Yes Yes 19.30* Yes Yes 2022.2 Yes
문자 집합과 인코딩 P2314R4 10 2022.2
초기화-구문( for 루프 의)을 확장하여 별칭-선언 을 허용 P2360R0 12 14 14.0.0* 2022.2
다차원 첨자 연산자 ( FTM ) * P2128R6 12 15 19.42* 14.0.3* 2022.2
람다 에 대한 속성 P2173R1 9 13 19.44* 13.1.6* 6.6 2022.2 22.5
#warning P2437R1 예* 15.0.0* 6.5 2023.2
인코딩 불가능한 와이드 문자 리터럴 및 멀티캐릭터 와이드 문자 리터럴 제거 P2362R3 13 14 15.0.0* 6.7 2023.2
복합문 끝의 레이블 P2324R2 13 16 16.0.0* 6.5 2023.2 23.9
구분된 이스케이프 시퀀스 P2290R3 13 15 15.0.0* 6.7 2023.2
명명된 유니버설 문자 이스케이프 ( FTM ) * P2071R2 13 15 15.0.0* 6.7 2023.2
일부 constexpr 제한 완화  ( FTM ) * P2448R2 13 17 (부분적)
19
2024.0 (부분적)
간소화된 암시적 이동  ( FTM ) * P2266R3 13 13 6.7 2022.2
static operator ( ) ( FTM ) * P1169R4 13 16 19.44* 16.0.0* 6.7 2023.2
선택적 확장 부동 소수점 타입 에 대한 요구사항 P1467R9 13 N/A 6.4
상속된 생성자로부터의 클래스 템플릿 인수 추론 P2582R1 14
속성 [[ assume ]] P1774R8 13 19
이식 가능한 소스 파일 인코딩으로서의 UTF-8 지원 P2295R6 13* 15* 19.0 (Update 2)* * 15.0.0* 2023.2
static operator [ ] ( FTM ) * P2589R1 13 16 19.44* 16.0.0* 6.7 2023.2
constexpr 함수 내에서 static constexpr 변수 허용 ( FTM ) * P2647R1 13 16 16.0.0* 2023.2
범위 기반 for 루프 초기화에서 임시 객체의 수명 확장  ( FTM ) * P2644R1
P2718R0
CWG2659
15 19
선언과 그 위치 찾기 P1787R6
DR11: 람다 후행 반환 타입의 범위 변경 P2036R3
P2579R0
17 2023.2
DR20: 의미 있는 내보내기 P2615R1 15 17 (부분적)
DR20: consteval 상위로 전파되어야 함  ( FTM ) * P2564R3 14 17 16.0.0* 6.7 2024.0
DR98: 유니코드 표준 부록 31을 사용한 C++ 식별자 구문 P1949R7 12 14 14.0.0* 6.4 2022.2
DR11: 중복 속성 허용 attributes P2156R1 11 13 13.1.6* 6.5 23.9
DR20: 기능 테스트 매크로 값 조정 __cpp_concepts P2493R0 12 19.32* 6.4 23.3
DR98: 기존 관행에 맞춰 wchar_t 요구 사항 완화 P2460R2 Yes Yes Yes 15.0.0* N/A 2023.2
DR11: 상수 표현식에서 알려지지 않은 포인터와 참조 사용 P2280R4 14 20 *
DR20: 여러분이 찾고 있는 동등 연산자 P2468R2 13 16 16.0.0* 2023.2
DR20: char8_t 호환성 및 이식성 수정  ( FTM ) * P2513R4 13 16 19.34* 16.0.0* 2023.2
DR98/11: 진단 지시문 보고 방식을 명확히 하고 템플릿 컨텍스트에서 값에 의존하지 않는 표현식의 static_assert 를 허용함 CWG2518 13 17 16.0*
(부분적)*
19.40*


C++23 기능


문서
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray

C++23 라이브러리 기능

변경된 부분: - `Feature-testing macro:` → `기능 테스트 매크로:` - HTML 태그, 속성, 코드 블록은 그대로 유지 - C++ 관련 용어(std::basic_string::contains(), std::basic_string_view::contains(), FTM, P1679R3 등)는 번역하지 않음 변경된 부분: - `Feature-testing macro:` → `기능 테스트 매크로:` HTML 태그, 속성, 코드 내의 텍스트(std::invoke_r(), FTM, P2136R3, 버전 번호 등)는 그대로 유지하고, 설명 텍스트만 한국어로 번역했습니다. 번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - HTML 태그, 속성, ` `, `
`, `` 태그 내부의 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(std::byteswap(), FTM, __cpp_lib_byteswap 등)는 번역하지 않음
- 나머지 텍스트는 정확하고 전문적인 한국어로 번역
**변경 사항:** - "Printing" → "출력" (C++ 출력 연산에 적합한 전문 용어) - HTML 태그, 속성, 코드 블록(`volatile T*`)은 원본 그대로 유지 - 버전 번호, 문서 링크, 표시 텍스트는 번역하지 않음 번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - HTML 태그, 속성, ` `, `
`, `` 태그 내부의 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(FTM, expected 등)는 번역하지 않음
- 모든 HTML 구조와 서식은 원본 그대로 보존
**변경 사항 설명:** - "constexpr for" → "에 대한 constexpr" (문장 구조를 자연스러운 한국어 어순으로 조정) - "and" → "및" - HTML 태그, 속성, ` `, `
`, `` 태그 내 내용은 그대로 보존
- C++ 관련 용어(constexpr, FTM, sin() 등)는 번역하지 않음
- 주석 텍스트만 한국어로 정확하게 번역
번역된 내용: - `Feature-testing macro:` → `기능 테스트 매크로:` - HTML 태그, 속성, ` `, `
`, `` 태그 내부의 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(std::unreachable(), FTM, P0627R6 등)는 번역하지 않음
- 숫자 값과 버전 정보는 원본 그대로 유지
변경된 부분: - `13 (partial)*` → `13 (부분적)*` - `21 (partial)*` → `21 (부분적)*` - 툴팁 텍스트: - `type traits were implemented but some library changes were missing` → `type traits가 구현되었지만 일부 라이브러리 변경사항이 누락됨` - `only type traits were implemented` → `type traits만 구현됨` C++ 관련 용어(std, reference_constructs_from_temporary, reference_converts_from_temporary, FTM, P2255R2 등)와 HTML 태그, 코드 태그는 원본 그대로 유지되었습니다. 변경된 부분: - `and` → `및` (영어 "and"의 한국어 번역) 번역된 내용: - `Feature-testing macro:` → `기능 테스트 매크로:` - C++ 관련 용어(`views::chunk_by`, `FTM`, `__cpp_lib_ranges_chunk_by` 등)와 HTML 태그, 코드는 원본 유지 - 모든 HTML 구조와 속성, 스타일은 변경 없이 보존 변경된 부분: - `title="Feature-testing macro:` → `title="기능 테스트 매크로:` 나머지 텍스트는 C++ 관련 용어(`flat_map`, `FTM`, `P0429R9`)와 HTML 태그, 코드 태그 내부 내용은 번역하지 않고 원본을 유지했습니다. **번역 설명:** - "Compatibility between std::tuple and tuple-like objects" → "std::tuple과 튜플-유사 객체 간의 호환성" - "FTM"은 원문 그대로 유지 (기능 테스트 매크로 약어) - "partial" → "부분적"으로 번역 - HTML 태그, 속성, title 속성 내 텍스트는 번역하지 않고 원본 유지 - C++ 관련 용어(std::tuple, pair, array 등)는 번역하지 않음 번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - C++ 관련 용어(`views::cartesian_product`, `__cpp_lib_ranges_cartesian_product`, `FTM` 등)는 원본 유지 - HTML 태그, 속성, 코드 블록은 변경 없이 보존 - 문서 제목(title 속성)은 한국어로 번역 **번역 결과:** **번역 설명:** - "should be explicit" → "는 명시적이어야 함"으로 번역 - C++ 용어(std::basic_string_view, constructor)는 원문 유지 - HTML 태그, 속성, 코드, 숫자 값은 모두 원본 그대로 보존 - 링크와 스타일 속성은 변경 없이 유지 **번역 설명:** - "Repairing"을 "수정"으로 번역하고 문장 구조를 자연스러운 한국어 어순으로 조정했습니다 - "and"를 "와"로 번역하여 연결어를 자연스럽게 처리했습니다 - HTML 태그, 속성, C++ 관련 용어(input range adaptors, std::counted_iterator)는 원본 그대로 유지했습니다 - title 속성 내의 텍스트도 번역하지 않고 원본을 유지했습니다 - 표의 숫자 데이터와 기호는 변경하지 않았습니다
C++23 기능

문서

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
스택트레이스 라이브러리 ( FTM ) * P0881R7
P2301R1
12 (부분적)*
14*
19.34*
<stdatomic.h> ( FTM ) * P0943R6 12 15 19.31* 14.0.3*
std::is_scoped_enum ( FTM ) * P1048R1 11 12 19.30* 13.0.0*
std::basic_string::contains() , std::basic_string_view::contains() ( FTM ) * P1679R3 11 12 19.30* 13.0.0*
std::to_underlying ( FTM ) * P1682R3 11 13 19.30* 13.1.6*
time_point<>::clock 에 대한 요구사항 완화 P2212R2 N/A N/A N/A N/A
Allocator 인터페이스에서 크기 피드백 제공 ( FTM ) * P0401R6 15 19.30* 14.0.3*
<spanstream> : std::span 기반 버퍼를 사용하는 문자열 스트림  ( FTM ) * P0448R4 12 19.31*
std::out_ptr() , std::inout_ptr() ( 기능 테스트 매크로 ) * P1132R8 14 19 19.30*
constexpr type_info::operator==() ( FTM ) * P1328R1 12 17 19.33* *
19.34*
15.0.0*
std::stack std::queue 에 대한 반복자 쌍 생성자 ( FTM ) * P1425R4 12 14 19.31* 14.0.3*
컨테이너 추론 가이드에서 할당자를 위한 비-추론 문맥 P1518R2 12 * 13 * 19.31* * 13.1.6* *
ranges::starts_with() ranges::ends_with() ( FTM ) * P1659R3 17 (부분적)*
18
19.31* 16.0.0*
std::basic_string std::basic_string_view nullptr 로부터의 생성 금지 P2166R1 12 13 19.30* 13.1.6*
std::invoke_r() ( FTM ) * P2136R3 12 17 19.31* 15.0.0*
범위 생성자 for std::basic_string_view P1989R2 11 14 19.30* 14.0.3*
std::pair 의 전달 참조 생성자 를 위한 기본 템플릿 인수 P1951R1 14 14 19.30* 14.0.3*
가비지 컬렉션 및 도달 가능성 기반 메모리 누수 감지 제거 ( 라이브러리 지원 ) P2186R2 12 14 19.30* 14.0.3*
zip: views::zip , views::zip_transform , views::adjacent , 및 views::adjacent_transform ( FTM ) * P2321R2 13 15 (부분)* 19.33* (부분)* * *
19.37*
14.0.3*
연관 컨테이너를 위한 이종 삭제 오버로드  ( FTM ) * P2077R3 19.32*
std::byteswap() ( FTM ) * P1272R4 12 14 19.31* 14.0.3*
출력 volatile T * P1147R1 11.3 14 19.31* 14.0.3*
basic_string::resize_and_overwrite() ( FTM ) * P1072R10 12 14 19.31* 14.0.3*
std::optional 모나딕 연산 ( FTM ) * P0798R8 12 14 19.32* 14.0.3*
std::move_only_function ( FTM ) * P0288R9 12 19.32*
std::exchange 에 조건부 noexcept 명세를 추가 P2401R0 12 14 19.25* 14.0.3*
std::span std::basic_string_view TriviallyCopyable 이어야 함을 요구 P2251R1 Yes Yes Yes Yes
"C 헤더"의 상태 명확화 P2340R1 Yes Yes Yes Yes
<expected> ( FTM ) * P0323R12
P2549R1
12 16 19.33* 15.0.0*
<cmath> <cstdlib> 에 대한 constexpr ( FTM ) * P0533R9 4.6 (부분적)*
std::unreachable() ( FTM ) * P0627R6 12 15 19.32* 14.0.3*
std::aligned_storage std::aligned_union 사용 중단 P1413R3 13 16 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary ( FTM ) * P2255R2 13 (부분적)*
14
21 (부분적)*
constexpr std::unique_ptr ( FTM ) * P2273R3 12 16 19.33* 15.0.0*
범위로부터 컨테이너와 문자열을 생성하기 위해 ranges::to() , 태그된 생성자들, 삽입 및 할당 멤버 함수들 사용  ( FTM ) * ( FTM ) * P1206R7 14 (부분 지원)*
15
17 19.34* 15.0.0*
사용자 정의 범위 어댑터에 대한 파이프 지원 ( ranges::range_adaptor_closure , std::bind_back )  ( FTM ) * ( FTM ) * P2387R3 13 (부분적)*
14
19 19.34*
ranges::iota() , ranges::shift_left() , 및 ranges::shift_right() ( FTM ) * ( FTM ) * P2440R1 13 (부분적)* 19.34*
views::join_with ( FTM ) * P2441R2 13 19.34*
views::chunk views::slide ( FTM ) * ( FTM ) * P2442R1 13 19.33*
views::chunk_by ( FTM ) * P2443R1 13 18 19.33* 16.0.0*
std::mdspan : 비소유 다차원 배열 참조  ( FTM ) * P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (부분적)*
18
19.39* 15.0.0*
<flat_map> ( FTM ) * P0429R9 15 20
<flat_set> ( FTM ) * P1222R4 15 21
ranges::find_last() , ranges::find_last_if() , 및 ranges::find_last_if_not() ( FTM ) * P1223R5 13 19 19.36*
독립형 라이브러리: 쉬움 <utility> , <ranges> , 및 <iterator> P1642R11 13 * N/A
views::stride ( FTM ) * P1899R3 13 19.34*
std::tuple 과 튜플-유사 객체 간의 호환성  ( FTM ) * P2165R4 14 2.9 (부분적)* 19.36* (부분적) *
19.37*
부분적*
상수 반복자, 센티넬 및 범위 수정. views:: as_const ( FTM ) * P2278R4 13 19.35* (부분적)*
19.36*
포맷팅 범위  ( FTM ) * P2286R8 15 (부분)*
15.2
16 19.37* (부분)*
19.39* (부분)*
19.41* (부분)*
19.42*
15.0.0*
기본 컨테이너 포맷팅 개선 ( FTM ) * P2585R1 15 16 (부분적)*
17
19.42* 15.0.0*
서식화된 출력 라이브러리 <print> ( FTM ) * P2093R14
P2539R4
14 17 (부분적)*
18
19.37* 15.0.0* *
16.0.0*
포맷팅 std::thread::id std::stacktrace ( FTM ) * P2693R1 14 17 (부분적)* 19.38* 15.0.0*
constexpr std::to_chars() std::from_chars() 의 정수형 오버로드에 대한 FTM * P2291R3 13 16 19.34* 15.0.0*
ranges::contains() ranges::contains_subrange() ( FTM ) * P2302R4 13 18 (부분적)*
19
19.34* 16.0.0* *
범위 폴드 알고리즘 ( FTM ) * P2322R6 13 19.35*
views::cartesian_product ( FTM ) * P2374R4
P2540R1
13 19.37*
이동 전용(move-only) 타입에 대한 비교 개념 지원 추가 ( equality_comparable , totally_ordered , three_way_comparable )  ( FTM ) * P2404R3 19.36*
범위 반복자를 비범위 알고리즘의 입력으로 사용  ( FTM ) * P2408R5 19.34*
constexpr std::bitset ( FTM ) * P2417R2 13 16 19.34* 15.0.0*
basic_string::substr() && P2438R2 16 19.34* 15.0.0*
views::as_rvalue ( FTM ) * P2446R2 13 16 19.34* 15.0.0*
표준 라이브러리 모듈  ( FTM ) * P2465R3 15* 17 (부분)* 19.35*
(부분)*
19.36*
std::forward_like() ( FTM ) * P2445R1 14 16 19.34* 15.0.0*
std::fstream 을 위한 배타적 모드 지원 ( FTM ) * P2467R1 12 18 19.36* 16.0.0*
views::repeat ( FTM ) * P2474R2 13 17 19.36* 15.0.0*
범위 어댑터를 이동 전용(move-only) 타입을 허용하도록 완화  ( FTM ) * P2494R2 14 17 19.34* 15.0.0*
std::basic_string_view range constructor should be explicit P2499R0 12.2 16 19.34* 15.0.0*
std::basic_string_view range constructor 는 명시적이어야 함 P2499R0 12.2 16 19.34* 15.0.0*
std::generator : 범위를 위한 동기 코루틴 생성기  ( FTM ) * P2502R2
P2787R0
14 19.43*
std::apply 에 조건부 noexcept 명세를 추가 P2517R1 10 18 19.34* 16.0.0*
명시적 수명 관리 ( std::start_lifetime_as )  ( FTM ) * P2590R2
P2679R2
chrono 타입의 지역화된 포맷팅에서 인코딩 처리 명확화  ( FTM ) * P2419R2 15* 19.34* *
std::move_iterator 는 항상 input_iterator 가 아니어야 함 ( FTM ) * P2520R0 12.3* 17* 19.34* * 15.0.0*
명시적 객체 매개변수 호출 연산자에 대한 deduction guides 업데이트 LWG3617 14 19.34*
static operator ( ) 에 대한 추론 가이드 업데이트 P1169R4 13 16 19.39* 15.0.0*
확장 부동 소수점 타입에 대한 표준 이름 및 라이브러리 지원 P1467R9 13 19.37* *
std::expected 에 대한 모나딕 연산 ( FTM ) * P2505R5 13 17 19.36* 15.0.0*
views::enumerate ( FTM ) * P2164R9 13 19.37*
std::is_implicit_lifetime ( FTM ) * P2674R1 20
std::common_reference_t std::reference_wrapper 는 참조 타입이어야 함  ( FTM ) * ( FTM ) * P2655R3 19.37*
사용자의 std::allocator_traits 특수화를 허용하지 않음 P2652R2 19 19.37*
사용 중단 예정 std::numeric_limits::has_denorm P2614R2 18 19.37* 16.0.0*
view s 의 다중 매개변수 생성자를 explicit 로 만들기 P2711R1 17 (부분)* 19.36* * 15.0.0*
DR20: Ranges를 살짝 완화  ( FTM ) * P2609R3 15 20 19.37*
DR20: 적절한 평탄화를 위한 스태싱 반복자 보관 P2770R0 14 18 19.37*
DR17: std::visit() for classes derived from std::variant ( FTM ) * P2162R2 11.3 13 19.20* *
19.30*
13.1.6*
DR20: 조건부로 차용된 범위 P2017R1 11 16 19.30*
DR20: input range adaptors std::counted_iterator 수정 P2259R1 12 19.30* (partial)*
19.31*
DR20: views::join 는 모든 범위의 뷰를 결합해야 함 P2328R1 11.2 15 19.30* 14.0.3*
DR20: view default_initializable 을 요구하지 않음 ( FTM ) * P2325R3 11.3 16 19.30* 15.0.0*
DR20: 범위 어댑터 객체는 인수를 값으로 바인딩함 P2281R1 11 14 19.29 (16.10)*
(부분적)*
19.31*
14.0.3*
DR20: constexpr for std::optional and std::variant ( FTM ) * ( FTM ) * P2231R1 11.3 (부분적)*
12
13 (부분적)*
19
19.31* 13.1.6* (부분적)
DR20: views::lazy_split 및 재설계된 views::split P2210R2 12 16 19.31* 15.0.0*
DR20: 수정 ranges::istream_view P2432R1 12 16 19.31* 15.0.0*
DR20: view 소유권을 가진  ( FTM ) * P2415R2 12 14 19.31* 14.0.3*
DR20: chrono 포매터의 로케일 처리 수정  ( FTM ) * P2372R3
P2418R2
13 19.31*
DR20: 정수 클래스 타입 정리 P2393R1 19.32*
DR20: 컴파일 타임 형식 문자열 검사; std::format() 계열의 바이너리 코드 크기 감소  ( FTM ) * P2216R3 13 14 (부분적)*
15
19.32* 14.0.3*
DR20: 비 const-포맷 가능 타입에 대한 지원을 std::format 에 추가 P2418R2 13 15 19.32* 14.0.3*
DR20: std::basic_format_string P2508R1 13 15 19.35* 14.0.3*
DR20: 포이즌 필이 너무 독하다  ( FTM ) * P2602R2 14 19 19.36*
DR20: std::format 채움 문자 허용 사항 P2572R1 14 17 19.37*
DR20: std::format 의 너비 추정 개선 P2675R1 14 17 19.38*
DR20: std::barrier 의 페이즈 완료 보장  ( FTM ) * P2588R3 19.28 (16.8)* *
19.36*


C++23 기능


논문
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

C++20 기능

C++20 핵심 언어 기능

**번역 설명:** - "Parenthesized initialization of aggregates" → "집계체의 괄호 초기화"로 번역 - HTML 태그, 속성, ` `, `
`, `` 태그 내 내용은 번역하지 않음
- C++ 전문 용어(aggregate, initialization, FTM 등)는 원문 유지
- 링크 텍스트와 기술적 내용은 정확성과 전문성을 유지하며 번역
C++20 기능

문서(들)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
람다 캡처 허용 Lambda capture [ = , this ] P0409R2 8 6 19.22* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
__VA_OPT__ P0306R4
P1042R1
8 (부분적)*
10 (부분적)*
12
9 19.25* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
지정자 초기화 ( FTM ) * P0329R4 4.7 (부분적)*
8
3.0 (부분적)*
10
19.21* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
제네릭 람다를 위한 템플릿 매개변수 목록 ( FTM ) * P0428R2 8 9 19.22* 11.0.0* 5.1 2021.1 20.7 12.0 11.0
비트 필드를 위한 기본 멤버 초기화자 P0683R1 8 6 19.25* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
클래스 템플릿 인수 추론에서의 초기화자 리스트 생성자 P0702R1 8 6 19.14* Yes 5.0 2021.1 20.7 12.0 11.0
const & const 한정 멤버 포인터 P0704R1 8 6 19.0 (2015)* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
Concepts ( FTM ) * P0734R0 5*
10
10 19.23* (부분 지원)*
19.30*
12.0.0* (부분 지원) 6.1 2023.1* 20.11 12.0 11.0
평가되지 않은 컨텍스트에서의 람다 P0315R4 9 13 (부분적)*
14 (부분적)*
17
19.28 (16.8)* 13.1.6* (부분적) 6.2 2023.1 (부분적)
2024.0
20.7 12.0
3-way 비교 연산자 ( FTM ) * P0515R3 10 8 (부분적)
10
19.20* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
DR11: 암시적 람다 캡처 단순화 P0588R1 8 19.24* 5.1 2021.1 20.7 12.0
범위 기반 for를 위한 초기화 문장 P0614R1 9 8 19.25* 11.0.0* 6.0 2021.7 20.11 12.0 11.0
기본 생성 가능하고 할당 가능한 상태 없는 lambdas P0624R2 9 8 19.22* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
기본화된 특수 멤버 함수의 타입 불일치 P0641R2 9 (부분)* 8 19.0 (2015)* (부분)* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
특수화에 대한 접근 검사 P0692R1 8 (부분적)
14
19.26* 14.0.0* 5.1 2021.1 20.7 12.0
ADL과 보이지 않는 함수 템플릿 P0846R0 9 9 19.21* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
DR11: constexpr 함수 정의가 상수 평가에 필요한 경우 를 명시함 ( FTM ) * P0859R0 5.2 (부분적)*
9
8 19.27* (부분적)*
19.31* *
11.0.0* (부분적) 12.0 11.0
속성 [[ likely ]] [[ unlikely ]] P0479R5 9 12 19.26* 13.0.0* 5.1 2021.7 20.7 12.0
typename 사용을 더 선택적으로 만들기 P0634R3 9 16 19.29 (16.10)* 16.0.0* 5.1 2023.1 20.7 12.0
Pack-expansions in 람다 init-captures ( FTM ) * P0780R2 9 9 19.22* 11.0.3* 6.1 2021.7 20.11 12.0 11.0
속성 [[ no_unique_address ]] P0840R2 9 9 19.28 (16.9)* * 11.0.3* 5.1 2021.1 20.7 12.0 11.0
조건부로 단순화된 특수 멤버 함수  ( FTM ) * P0848R3 10 16 19.28 (16.8)* 6.1 2021.7 20.11 12.0
DR17: structured bindings 커스터마이제이션 포인트 탐색 규칙 완화 P0961R1 8 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
DR11: range-for 루프 커스터마이제이션 포인트 탐색 규칙 완화 P0962R1 8 8 19.25* 11.0.0* 5.1 2021.1 20.7 12.0 11.0
DR17: 접근 가능한 멤버에 대한 구조화된 바인딩 허용 P0969R0 8 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Destroying operator delete ( FTM ) * P0722R3 9 6 19.27* 10.0.0* 6.1 2023.1 20.11 12.0 11.0
클래스 타입 상수 템플릿 매개변수 P0732R2 9 12 (부분적) 19.26* (부분적)*
19.28 (16.9)*
13.0.0* (부분적) 6.2 2023.1 (부분적) 21.3 12.0
[=] 를 통한 this 의 암시적 캡처 사용 중단 P0806R2 9 7 19.22* 10.0.1* 5.1 20.7 12.0 11.0
explicit(bool) ( FTM ) * P0892R2 9 9 19.24* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
기능 테스트 매크로 통합 P0941R2 5 3.4 19.15* (부분적)
19.20*
5.0 2021.1 20.7 12.0 11.0
사용자 선언 생성자가 있는 집합체(aggregate) 금지 P1008R1 9 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
constexpr 가상 함수 ( FTM ) * P1064R0 9 9 19.28 (16.9)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
비교 연산 일관성 개선 P1120R0 10 8 (부분 지원)
10
19.22* 12.0.0* 5.1 2023.1 20.7 12.0 11.0
char8_t ( FTM ) * P0482R6 9 7* 19.22* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
std::is_constant_evaluated() ( FTM ) * P0595R2 9 9 19.25* 11.0.3* 5.1 19.1 21.1 12.0 11.0
constexpr try - catch 블록 P1002R1 9 8 19.25* 10.0.1* 5.1 2023.1 20.7 12.0 11.0
즉시 함수 ( consteval )  ( FTM ) * P1073R3 10 (부분적)*
11
11 (부분적)
14 (부분적)*
17
19.28 (16.8)*
(부분적)*

19.29 (16.10)*
11.0.3* (부분적)
15.0.0*
5.1 2021.1 20.7 12.0
중첩 인라인 네임스페이스 P1094R2 9 8 19.27* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
제약된 선언 을 위한 또 다른 접근법 P1141R2 10 10 19.26* (부분적)
19.28 (16.9)*
12.0.5* 6.1 2023.1 20.11 12.0 11.0
부호 있는 정수는 2의 보수 표현을 사용합니다 P1236R1 9 9 Yes 11.0.3* N/A 2023.1* yes* 12.0 11.0
dynamic_cast 및 다형적 typeid 상수 표현식 P1327R1 10 9 19.28 (16.9)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
constexpr 내에서 유니온의 활성 멤버 변경 constexpr ( FTM ) * P1330R0 9 9 19.10* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
코루틴 ( FTM ) * ( FTM ) * P0912R5
LWG3393
10 8 (부분적)
17 (부분적)*
19.0 (2015)* (부분적)
19.10* *
19.28 (16.8)*
10.0.1* (부분적) 5.1 2021.1 23.3* 12.0 (호스트 코드만)
집계체의 괄호 초기화 initialization of aggregates ( FTM ) * P0960R3 10 16 19.28 (16.8)* 16.0.0* 5.1 2021.1 20.7 12.0
DR11: new 표현식에서 배열 크기 추론 new -expressions P1009R2 11 9 19.27* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
모듈 ( FTM ) * P1103R3 11 (부분적) 8 (부분적) 19.0 (2015)* (부분적)
19.10* *
19.28 (16.8)*
10.0.1* (부분적) 2023.1 (부분적)
강화된 유니코드 요구사항 P1041R4
P1139R2
10 Yes 19.0 (2015)* *
19.26* *
Yes N/A 2023.1* Yes 12.0 11.0
<=> != == P1185R2 10 10 19.22* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
DR11: 다른 예외 명세를 가진 명시적으로 기본 설정된 함수 P1286R2 10 9 19.28 (16.8)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
람다 캡처 및 구조화된 바인딩의 저장 클래스 지정자 P1091R3
P1381R1
10 8 (부분적)
16
19.11* *
19.24* *
16.0.0* 5.1 2021.1 20.7 12.0
알 수 없는 경계의 배열로의 변환 허용 P0388R4 10 14 19.27* 14.0.0* 6.0 2021.5 20.11 12.0
constexpr 컨테이너 연산들  ( FTM ) * P0784R7 10 10 19.28 (16.9)* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
volatile 의 일부 사용을 폐지 예정 P1152R4 10 10 19.27* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
constinit ( FTM ) * P1143R2 10 10 19.29 (16.10)* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
첨자에서 쉼표 연산자 사용 중단 P1161R3 10 9 19.25* 11.0.3* 6.0 2021.7 20.11 12.0 11.0
[[ nodiscard ]] 메시지 포함 P1301R4 10 9 19.25* 11.0.3* 6.0 2021.5 20.11 12.0 11.0
constexpr 함수에서의 trivial 기본 초기화 P1331R2 10 10 19.27* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
평가되지 않은 asm 선언문을 constexpr 함수에서 사용 P1668R1 10 10 19.28 (16.9)* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
using enum ( FTM ) * P1099R5 11 13 19.24* 13.1.6* 6.3 2023.1 22.5 12.0
지정된 비교 범주에 대한 Three-way comparison 합성 P1186R3 11 10 19.24* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
DR17: [[ nodiscard ]] 생성자용 P1771R1 10 9 19.24* 11.0.3* 6.0 2021.5 20.11 12.0 11.0
별칭 템플릿에 대한 클래스 템플릿 인수 추론 ( FTM ) * P1814R0 10 19 19.27* 6.5 23.9 12.0
집계체에 대한 클래스 템플릿 인수 추론 ( FTM ) * P1816R0
P2082R1
10*
11*
17 19.27* 6.3 2023.1 (부분적)*
2024.1
23.3 12.0
DR11: 더 많은 지역 객체와 우측값 참조에 대한 암시적 이동 P1825R0 11* 13 19.24* 13.1.6* 6.0 2021.5 20.11 12.0
값으로 비교 기본 설정 허용 P1946R0 10 10 19.25* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
std::weak_equality std::strong_equality 제거 P1959R0 10 10 19.25* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
상수 템플릿 매개변수와의 불일치  ( FTM ) * P1907R1 10 (부분적)
11
18 (부분적)* 19.26* 13.1.6* (부분적) 6.2 2023.1 (부분적) 21.3 12.0
DR98: 유사 소멸자는 객체 수명을 종료시킴 P0593R6 11 11 Yes 12.0.5* N/A 2023.1* Yes 12.0 11.0
DR11: T * 에서 bool 로의 변환은 축소 변환으로 간주되어야 함 P1957R2 10*
11*
11 19.27* 12.0.5* 6.1 12.0 11.0


C++20 기능


논문
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray

C++20 라이브러리 기능

**변역 설명:** - "Synchronized buffered" → "동기화된 버퍼"로 정확한 기술 용어로 번역 - HTML 태그, 속성, ` `, `
`, `` 태그 내 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(std::basic_osyncstream, FTM, P0053R7 등)는 번역하지 않음
- 숫자, 버전 정보 등은 원본 그대로 보존
- 전문적인 기술 문서에 적합한 정확한 번역 적용
변경사항: - "More constexpr for" → "에 대한 추가 constexpr" (문장 구조를 자연스러운 한국어 어순으로 조정) - "partial" → "부분적" - HTML 태그, 속성, 코드 블록은 그대로 유지 - C++ 관련 용어(constexpr, FTM 등)는 번역하지 않음 - 전문적인 번역 스타일 유지 번역된 내용: - `Feature-testing macro:` → `기능 테스트 매크로:` - HTML 태그, 속성, ` `, `
`, `` 태그 내부의 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(`std::remove_cvref`, `FTM`, `__cpp_lib_remove_cvref` 등)는 번역하지 않음
- 숫자, 버전 정보, 링크 등은 원본 그대로 유지
**설명:** HTML 태그와 속성, ` `, `
`, `` 태그 내부의 텍스트는 번역하지 않았으며, C++ 관련 용어도 그대로 유지했습니다. 표의 내용은 숫자와 버전 정보로 구성되어 있어 번역이 필요하지 않습니다.
**변역 결과:** **변경된 부분:** - `FTM` → `기능 테스트 매크로` (Feature Testing Macro) - `Feature-testing macro:` → `기능 테스트 매크로:` **보존된 부분:** - 모든 HTML 태그와 속성 - ` `, `
`, `` 태그 내부의 텍스트 (해당 태그가 없으므로 적용되지 않음)
- C++ 관련 용어 (`std::atomic_ref`, `__cpp_lib_atomic_ref`, `P0019R8` 등)
- 숫자 값과 버전 정보
- 표시 형식과 스타일 속성
변경된 부분: - `Feature-testing macro:` → `기능 테스트 매크로:` - HTML 태그, 속성, C++ 관련 용어(std::type_identity, FTM, P0887R1 등)는 원본 그대로 유지 - 코드 내의 숫자와 버전 정보는 번역하지 않음 번역된 내용: - "and" → "및" - "Feature-testing macro:" → "기능 테스트 매크로:" - ` ` 태그 내의 `std::unwrap_ref_decay`와 `std::unwrap_reference`는 C++ 용어로 번역하지 않음 - HTML 태그와 속성, ` ` 태그 내의 텍스트는 원본 유지 - 나머지 모든 HTML 구조와 서식은 동일하게 유지 번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - HTML 태그, 속성, ` `, `
`, `` 태그 내부의 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(std::bind_front(), FTM, P0356R5 등)는 번역하지 않음
번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - HTML 태그, 속성, ` `, `
`, `` 태그 내부의 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(std::to_array(), FTM, P0325R4 등)는 번역하지 않음
- 숫자, 버전 정보 등은 원본 그대로 유지
변경된 부분: - `Feature-testing macro:` → `기능 테스트 매크로:` - `Enabled for Clang 12+` → `Clang 12+에서 활성화됨` C++ 관련 용어(`constexpr`, `std::vector`, `FTM`, `__cpp_lib_constexpr_vector`), HTML 태그 및 속성, 버전 번호 등은 원본 그대로 유지되었습니다.
C++20 기능

문서

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
std::endian ( FTM ) * P0463R1 8 7 19.22* 10.0.0*
std::make_shared() 를 배열 지원으로 확장  ( FTM ) * P0674R1 12 15 19.27* 14.0.3*
부동 소수점 원자 연산 ( FTM ) * P0020R6 10 18 19.22* 16.0.0*
동기화된 버퍼 ( std::basic_osyncstream )  ( FTM ) * P0053R7 11 18 19.29 (16.10)*
constexpr <algorithm> <utility> 헤더에 대한 FTM ) * P0202R3 10 8 (부분적)
12
19.26* 10.0.1* (부분적)
13.0.0*
<complex> 에 대한 추가 constexpr ( FTM ) * P0415R1 9 7 (부분적)
16
19.27* 10.0.0* (부분적)
15.0.0*
std::memory_order 를 범위 있는 열거형으로 만들기 P0439R0 9 9 19.25* 11.0.3*
문자열 접두사 접미사 확인: string (_view) ::starts_with / ends_with ( FTM ) * P0457R2 9 6 19.21* 10.0.0*
operator<=> <compare> 헤더에 대한 라이브러리 지원 ( FTM ) * P0768R1 10 7 (부분적)
12 (부분적)*
17
19.20* (부분적)
19.28 (16.9)*
13.0.0*
std::remove_cvref ( FTM ) * P0550R2 9 6 19.20* 10.0.0*
[[ nodiscard ]] 표준 라이브러리에서 P0600R1 9 7 (부분적)
16
19.13* (부분적)
19.22*
10.0.0* (부분적)
15.0.0*
std::move 사용 수치 알고리즘 에서 P0616R0 9 12 19.23* 13.0.0*
포인터를 원시 포인터로 변환하는 유틸리티 ( FTM ) * P0653R2 8 6 19.22* 지원
원자적 std::shared_ptr std::weak_ptr ( FTM ) * P0718R2 12 19.27*
std::span ( FTM ) * P0122R7 10 7 19.26* 10.0.0*
Calendar Time zone ( FTM ) * P0355R7 11 (부분적)*
13 (부분적)*
14
7 (부분적)
19 ( 부분적 )*
19.29 (16.10)* 10.0.0* (부분적)
<version> P0754R2 9 7 19.22* 10.0.0*
비순차 컨테이너 비교 P0809R0 Yes Yes 16.0* Yes
ConstexprIterator 요구사항  ( FTM ) * ( FTM ) * P0858R0 9 12 19.11* 13.0.0*
std::basic_string::reserve() 축소해서는 안 됨 P0966R1 11 8 19.25* 10.0.1*
원자적 비교-교환 (패딩 비트 포함) P0528R3 13 19.28 (16.8)*
std::atomic_ref ( FTM ) * P0019R8 10 19 19.28 (16.8)*
std::atomic_ref ( 기능 테스트 매크로 ) * P0019R8 10 19 19.28 (16.8)*
contains ( ) 연관 컨테이너의 멤버 함수, 예: std::map::contains() P0458R2 9 13 19.21* 13.1.6*
DR11: 조각별 생성 을 위한 보장된 복사 생략 P0475R1 9 19.29 (16.10)*
std::bit_cast() ( FTM ) * P0476R2 11 14 19.27* 14.0.3*
정수 2의 거듭제곱 2 연산 :

std::bit_ceil() , std::bit_floor() , std::bit_width() , std::has_single_bit() ( FTM ) *

P0556R3
P1956R1
9*
10*
9*
12*
19.25* *
19.27* *
19.28 (16.8)*
11.0.3* *
13.0.0* *
erase-like 알고리즘의 반환 값 개선  ( FTM ) * P0646R1 9 10 19.21* 12.0.0*
std::destroying_delete_t ( FTM ) * P0722R3 9 9 19.27* 11.0.3*
std::is_convertible ( FTM ) * P0758R1 9 9 19.23* 11.0.3*
std::shift_left/right <algorithm> 에 추가 ( FTM ) * P0769R2 10 12 19.21* 13.0.0*
std::swap() swap 관련 함수에 대한 Constexpr 지정 P0879R0 10 13 19.26* 13.1.6*
std::type_identity ( FTM ) * P0887R1 9 8 19.21* 10.0.1*
Concepts 라이브러리 ( FTM ) * P0898R3 10 13 19.23* 13.1.6*
constexpr 비교 연산자 for std::array P1023R0 10 8 19.27* 10.0.1*
std::unwrap_ref_decay std::unwrap_reference ( FTM ) * P0318R1 9 8 19.21* 10.0.1*
std::bind_front() ( FTM ) * P0356R5 9 13 19.25* 13.1.6*
std::reference_wrapper 불완전한 타입을 위한 P0357R3 9 8 19.26* 10.0.1*
operator>>(basic_istream&, CharT*) 수정 P0487R1 11 8 19.23* 10.0.1*
char8_t 에 대한 라이브러리 지원 ( FTM ) * P0482R6 9 8 (부분적)
16
19.22* 10.0.1* (부분적)
15.0.0*
유틸리티 함수들 를 구현하여 uses-allocator construction 을 수행 P0591R4 9 16 19.29 (16.10)* 15.0.0*
DR17: std::variant std::optional 은 복사/이동 triviality를 전파해야 함 P0602R4 8.3 8 19.11* 10.0.1*
DR17: 합리적인 std::variant 변환 생성자 P0608R3 10 9 19.29 (16.10)* *
19.42* *
11.0.3*
std::function 의 이동 생성자는 noexcept 이어야 합니다 P0771R1 7.2 6 19.22*
One Ranges Proposal ( FTM ) * P0896R4 10 13 (부분적)
15*
19.29 (16.10)* 14.0.3*
비균질 조회(heterogeneous lookup) for unordered associative containers ( FTM ) * P0919R3
P1690R1
11 12 19.23* (P0919R3)
19.25* (P1690R1)
13.0.0*
<chrono> zero() , min() , 그리고 max() noexcept 여야 합니다 P0972R0 9 8 19.14* 10.0.1*
constexpr 에서 std::pointer_traits ( FTM ) * P1006R1 9 8 19.26* 10.0.1*
std::assume_aligned() ( FTM ) * P1007R3 9*
11
15 19.28 (16.9)* 14.0.3*
기본 초기화를 통한 스마트 포인터 생성 (예: make_unique_for_overwrite )  ( FTM ) * P1020R1
P1973R1
11*
12*
16 19.28 (16.9)* 15.0.0*
기타 constexpr 비트 ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P1032R1 10 13 19.28 (16.8)* 13.1.6*
std::span 의 비교 연산자 제거 P1085R2 10 8 19.26* 10.0.1*
상태 저장 할당자 전파를 operator+(basic_string) 에 대해 더 일관성 있게 만들기 P1165R1 10 15 19.26* 14.0.3*
일관된 컨테이너 삭제, 예: std::erase(std::vector) , 또는 std::erase_if(std::map) ( FTM ) * P1209R0
P1115R3
9*
10*
8*
11*
19.25* *
19.27* *
10.0.1* *
12.0.5* *
표준 라이브러리 헤더 유닛 P1502R1 11 19.29 (16.10)*
polymorphic_allocator<> 어휘 타입으로서  ( FTM ) * P0339R6 9 16 19.28 (16.9)* 15.0.0*
std::execution::unseq ( FTM ) * P1001R2 9 17 19.28 (16.8)*
std::lerp() std::midpoint() ( FTM ) * P0811R3 9 9 19.23* (부분적)
19.28 (16.8)*
11.0.3*
std::span 의 사용성 향상 P1024R3 10 9*
14
19.26* 11.0.3*
DR17: std::create_directory() 직관적으로 만들기 P1164R1 8.3 12 19.20* 13.0.0*
std::ssize() 및 부호 없는 범위에 대한 std::span ( FTM ) * P1227R2 10 9 19.25* 11.0.3*
( 비경계 ) 경계 배열을 위한 특성  ( FTM ) * P1357R1 9 9 19.25* 11.0.3*
std::to_array() ( FTM ) * P0325R4 10 10 19.25* 12.0.0*
std::basic_stringbuf 버퍼에 대한 효율적인 접근 P0408R7 11 17 19.29 (16.10)* 15.0.0*
레이아웃 - 호환성 포인터 - 상호 변환성 특성  ( FTM ) * ( FTM ) * P0466R5 12 19.29 (16.10)* *
비트 연산 : std ::

rotl() , rotr() , countl_zero() , countl_one() , countr_zero() , countr_one() , popcount() ( FTM ) *

P0553R4 9 9 19.25* *
19.28 (16.8)*
11.0.3*
수학 상수 ( FTM ) * P0631R8 10 11 19.25* 12.0.5*
텍스트 포맷팅 ( FTM ) * P0645R10 13 14 * *
17
19.29 (16.10)* 15.0.0*
std::stop_token std::jthread ( FTM ) * P0660R10 10 17
(부분적)*

20*
19.28 (16.9)*
constexpr std::allocator 및 관련 유틸리티  ( FTM ) * P0784R7 10 12 19.29 (16.10)* 13.0.0*
constexpr std::string ( FTM ) * P0426R1
P1032R1
P0980R1
12 15 19.29 (16.10)*
19.30* *
14.0.3*
constexpr std::vector ( FTM ) * P1004R2 12 15 19.29 (16.10)*
19.30* *
14.0.3*
입력 range adaptors P1035R7 10 16 19.29 (16.10)* 15.0.0*
constexpr std::invoke() 및 관련 유틸리티 P1065R2 10 12 19.28 (16.8)* 13.0.0*
원자적 대기 및 알림, std::counting_semaphore , std::latch std::barrier ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P1135R6 11 11 19.28 (16.9)* 13.1.6*
std::source_location ( FTM ) * P1208R6 11 15*
(부분적)
16
19.29 (16.10)* 15.0.0*
표준 라이브러리에 <=> 추가 P1614R2 10 14*
(부분 구현)
17*
(부분 구현)
19
19.29 (16.10)* 13.1.6* (부분 구현)
constexpr std::atomic std::atomic_flag 의 기본 생성자 ( FTM ) * P0883R2 10 13 19.26* 13.1.6*
constexpr 숫자 알고리즘에 대한 constexpr ( FTM ) * P1645R1 10 12 19.26* 13.0.0*
안전한 정수 비교 함수 ( FTM ) * P0586R2 10 13 19.27* 13.1.6*


C++20 기능


논문
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

이전 표준

참고 항목

기능 테스트 (C++20) C++ 언어 및 라이브러리 기능에 대응하는 매크로를 테스트하기 위한 전처리기 매크로 집합
C 문서 for 컴파일러 지원