Namespaces
Variants

Compiler support for C++23

From cppreference.net

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

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 추론)  ( 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) ( constexpr )  ( 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 15.0.0* 해당 없음 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*
(partial)*
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++ 관련 용어 포함)는 번역하지 않고 원본을 유지했습니다.
**번역 결과:** - HTML 태그와 속성은 그대로 유지 - ` `, `
`, `` 태그 내부 텍스트는 번역하지 않음
- C++ 관련 용어는 번역하지 않음
- FTM(Feature-testing macro)은 번역하지 않음
- 표의 숫자 값과 기술적 내용은 원본 유지
변경된 부분: - `Feature-testing macro:` → `기능 테스트 매크로:` HTML 태그, 속성, ` `, `
`, `` 태그 내부의 텍스트는 번역하지 않았으며, C++ 관련 용어는 그대로 유지했습니다.
변역된 내용: - "Printing" → "출력" (C++ 출력 연산에 해당하는 전문 용어) - HTML 태그, 속성, 블록 내의 C++ 코드(`volatile T*`)는 원본 그대로 유지 - 버전 번호, 문서 링크, 표시 텍스트 등은 변경 없음 번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - HTML 태그, 속성, ` `, `
`, `` 태그 내부의 내용은 번역하지 않고 원본 유지
- C++ 관련 용어(std::unreachable(), FTM, P0627R6 등)는 번역하지 않음
- 숫자 값과 버전 정보는 원본 그대로 유지
번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - C++ 관련 용어(`views::join_with`, `FTM`, `__cpp_lib_ranges_join_with`, `P2441R2`, 버전 번호 등)는 원본 그대로 유지 - HTML 태그와 속성, ` `, `
`, `` 태그 내 내용은 번역하지 않음
번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - HTML 태그, 속성, 코드, C++ 관련 용어는 원본 그대로 유지 - 모든 형식과 구조는 동일하게 보존 변경된 부분: - `and` → `및` (영어 "and"의 한국어 번역) - HTML 태그, 속성, ` ` 태그 내의 C++ 함수명, FTM, P1223R5 등의 기술 용어는 그대로 유지 번역된 내용: - "Feature-testing macro:" → "기능 테스트 매크로:" - C++ 관련 용어(`views::cartesian_product`, `FTM`, `__cpp_lib_ranges_cartesian_product` 등)는 원문 유지 - HTML 태그, 속성, 코드 블록은 변경 없이 보존 **변환 결과:** HTML 태그와 속성, ` `, `
`, `` 태그 내부의 텍스트, C++ 관련 용어는 번역하지 않고 원본 형식을 유지했습니다.
**변역 결과:** **변경된 부분:** - "FTM" → "기능 테스트 매크로" (Feature Testing Macro) - "Feature-testing macro:" → "기능 테스트 매크로:" **보존된 부분:** - 모든 HTML 태그와 속성 - ` `, `
`, `` 태그 내부의 내용 (해당 태그가 없으므로 적용되지 않음)
- C++ 관련 용어: `views::enumerate`, `__cpp_lib_ranges_enumerate`, `P2164R9` 등
- 숫자 값과 버전 정보
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
할당자 인터페이스에서 크기 피드백 제공 ( FTM ) * P0401R6 15 19.30* 14.0.3*
<spanstream> : std::span 기반 버퍼를 사용하는 문자열 스트림  ( FTM ) * P0448R4 12 19.31*
std::out_ptr() , std::inout_ptr() ( FTM ) * 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*
Range constructor 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에 대한 모나딕 연산 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::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*
views::enumerate ( 기능 테스트 매크로 ) * 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() std::variant 에서 파생된 클래스에 대한 ( FTM ) * P2162R2 11.3 13 19.20* *
19.30*
13.1.6*
DR20: 조건부로 빌린 범위 P2017R1 11 16 19.30*
DR20: 입력 범위 어댑터 std::counted_iterator 수정 P2259R1 12 19.30* (부분적)*
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: Poison Pills는 너무 독성이 강함  ( 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*