C++26
C++26은 C++23에 이어 C++ 프로그래밍 언어를 위한 국제 표준화 기구(ISO) 및 국제전기기술위원회(IEC) 14882 표준 버전의 비공식 이름이다. 이 버전의 현재 작업 초안은 N5014이다. C++ 표준 위원회에서 표준에 제안되고 채택된 문서와 2025년 6월 불가리아 소피아 및 온라인에서 개최된 표준화 회의록이 공개되어 있다. 초안의 문구는 기능적으로 완성되었으며, 국제 의견 투표를 위해 발송되고 있다. 2025년 11월 하와이 코나에서 열린 표준화 회의에서 일부 투표 의견을 해결한 후, C++ 표준 위원회는 투표 의견 해결을 완료하고 초안을 기술적으로 확정하며, 2026년 3월 런던에서 열리는 다음 표준화 회의에서 최종 승인 투표를 위해 초안을 발송할 것으로 예상된다. 일부 곧 출시될 기능을 구현한 실험적이고 표준 컴파일러는 Compiler Explorer를 통해 짧은 코드 스니펫에서 시도할 수 있다. 일부 컴파일러 변형은 "constexpr containers and adaptors"를 위한 "P3372"와 같이 구현하는 새로운 기능을 제안하는 문서의 짧은 식별자로만 구별된다.
기능
C++26에 채택된 변경 사항은 다음과 같다.
언어
- 컴파일 시점 반영. (댄 카츠가 개발한 클랭의 실험적인 포크는 현재 이 기능을 구현하는 유일한 오픈 소스 컴파일러이다. 이 포크와 EDG의 또 다른 구현은 Compiler Explorer를 통해 시도할 수 있다.)
- 키워드
contract_assert와 특별한 의미를 지닌 식별자 pre 및 post를 추가하는 계약 기능 (에릭 W. 피셀리어의 클랭 실험적 포크와 계약을 지원하는 몇 가지 GCC 변형은 Compiler Explorer를 통해 사용할 수 있다.)
- 사용자 생성
static_assert 메시지
- 초기화되지 않은 읽기 오류 동작
- 불완전한 형식에 대한 포인터 삭제는 잘못된 형식이어야 함
- 더 이상 사용되지 않는 배열 비교 제거
constexpr 구조화 바인딩 및 constexpr 변수에 대한 참조
constexpr 배치 new
void*에서 constexpr 캐스트
constexpr 컨테이너 및 어댑터
- 가변 인자 프렌드
- 상수 평가에서 예외 throw 허용
- 이름 없는 자리 표시자 변수
- 폴드 표현식을 포함하는 제약 조건의 순서
- 팩 인덱싱
- 구조화 바인딩은 팩을 도입할 수 있음
- 구조화 바인딩에 대한 속성
- 조건으로서의 구조화 바인딩 선언
- 새로운 식별자/클래스 속성 지정자
trivially_relocatable_if_eligible 및 replaceable_if_eligible
- 바이너리 리소스 포함을 위한
#embed 지시어(C23에서 처음 도입됨)와 전처리기 지시어를 통해 리소스 가용성을 확인할 수 있는 __has_embed 추가
- 평가되지 않은 문자열
@, $, `를 기본 문자 집합에 추가
= delete("reason");
- 옥스퍼드 가변 인자 쉼표, 즉 "선행 쉼표가 없는 생략 부호 매개변수를 더 이상 사용하지 않는다. 구문
(int...)는 C와 호환되지 않고 C++에 해로우며 (int, ...)로 쉽게 대체될 수 있다."
라이브러리
<meta>: 컴파일 시점 반영 지원
- 컴파일러가 사용하는 기존 속성 시스템과 다르게 동작하는 반영에 사용될 주석 지원
<contracts>: 계약에 의한 설계 지원
- 경계 강화 표준 라이브러리
- 전방 진행을 보장하는 표준 비동기 실행 컨텍스트를 제공하는 병렬 스케줄러
<simd>: 데이터 병렬 액세스(SIMD 또는 SIMD) 지원
- 구조화된 동시성을 위한 비동기 송신기/수신기 모델 (Libunifex는 C++17 이상에서 컴파일할 수 있는 프로토타입 구현이다.)
<hazard_pointer>: 스레딩을 위한 해저드 포인터
std::copyable_function
std::is_within_lifetime
<hive>: 삭제된 요소의 메모리를 재사용하는 하이브 데이터 구조 지원
<rcu>: 안전한 회수 읽기-복사-업데이트 메커니즘 지원
<inplace_vector>: 크기 조정 가능, 고정 용량, 제자리 연속 배열인 인플레이스 벡터 데이터 구조 지원
std::submdspan()
- 파일 스트림의 네이티브 핸들
std::formatter<std::filesystem::path>
- 문자열 스트림과
std::string_view 인터페이싱
std::bitset과 std::string_view 인터페이싱
views::concat
- 문자열 및 문자열 뷰의 연결
<text_encoding>: IANA 문자 집합 레지스트리 액세스 지원
std::println()으로 빈 줄 인쇄
std::ranges::generate_random
<linalg>: BLAS 기반의 자유 함수 선형 대수 인터페이스
std::chrono 값 클래스에 대한 해싱 지원
std::complex에 튜플 프로토콜 추가
<cmath> 및 <complex>에 대한 추가 constexpr
- 비율에 대한 새로운 2022 SI 접두사 추가:
std::quecto, std::ronto, std::ronna, std::quetta
std::add_sat, std::div_sat 등을 포함한 포화 연산
<debugging>: 디버깅 지원 및 디버거 프로그램을 돕는 언어 기능
반응
초안이 기능적으로 완성된 소피아 C++ 표준 위원회 회의와 그 직후 열린 국제 C++ 컨퍼런스인 C++ On Sea에서 여러 사람들이 여행 보고서를 발표했다. 모두 특히 컴파일 시점 반영의 도입을 주요 변경 사항으로 강조했다. 허브 서터는 C++ 표준 위원회의 "언어 진화" 실무 그룹의 부의장인 하나 두시코바의 말을 인용하며, 이 변경 사항의 잠재적 영향을 "완전히 새로운 언어"라고 요약했다.
C++26의 계약 기능은 다양한 이유로 C++ 위원회 내 일부 사람들에 의해 비판을 받아왔다.
각주
- ↑ “Working Draft, Standard for Programming Language C++” (PDF). 《Open Standards》. ISO/IEC. 2025년 8월 5일.
- ↑ “mailing2025-07 post-Sofia”. 《JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPP》. 2025년 9월 6일에 확인함.
- 1 2 “C++ IS Schedule” (PDF). JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPP. 2025년 9월 6일에 확인함.
- ↑ “The life of an ISO proposal: from "cool idea" to "international standard"”. 《News, Status & Discussion about Standard C++》. Standard C++ Foundation. 2025년 9월 6일에 확인함.
- ↑ “Upcoming Meetings, Past Meetings”. 《News, Status & Discussion about Standard C++》. The Standard C++ Foundation. 2025년 9월 6일에 확인함.
- ↑ Wyatt Childers 외 (2024년 6월 26일). “P2996R4 - Reflection for C++26”. 《isocpp.org》. WG21.
- ↑ “Contract assertions (since C++26) - cppreference.com”. 《en.cppreference.com》. 2025년 3월 9일에 확인함.
- ↑ “C++ keywords - cppreference.com”. 《en.cppreference.com》. 2025년 7월 27일에 확인함.
- ↑ Dargo, Sandor. “C++26: user-generated static_assert messages”. 《News, Status & Discussion about Standard C++》. The Standard C++ Foundation. 2025년 9월 6일에 확인함.
- ↑ “C++ keywords - cppreference.com”. 《en.cppreference.com》. 2025년 7월 27일에 확인함.
- ↑ “P3176R1: The Oxford variadic comma”. 《eisenwave.github.io》. 2024년 12월 9일에 확인함.
- ↑ Sutter, Herb. “Crate-training Tiamat, un-calling Cthulhu:Taming the UB monsters in C++”. 《Sutter's Mill》.
- 1 2 3 Sutter, Herb. “Trip report: June 2025 ISO C++ standards meeting (Sofia, Bulgaria)”. 《Sutter's Mill》. 2025년 9월 6일에 확인함.
- ↑ Sutter, Herb. “Trip report: Summer ISO C++ standards meeting (St Louis, MO, USA)”. 《Sutter's Mill》. 2025년 9월 6일에 확인함.
- ↑ Lopez-Gomez, Javier. “Summer WG21 Meeting; trip report”. 《Javier Lopez-Gomez personal site》. 2025년 9월 6일에 확인함.
- ↑ Dargo, Sandor. “Trip report: C++ On Sea 2025”. 《Sandor Dargo's Blog》. 2025년 9월 6일에 확인함.
- ↑ Timur Doumler 외 (2025년 10월 6일). “C++26 Contract Assertions, Reasserted” (PDF). 《open-std.org》. WG 21.