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, ...)로 쉽게 대체될 수 있다."

 라이브러리 
: 컴파일 시점 반영 지원
컴파일러가 사용하는 기존 속성 시스템과 다르게 동작하는 반영에 사용될 주석 지원
<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++ 위원회 내 일부 사람들에 의해 비판을 받아왔다.

 각주 

 외부 링크 
 C++26 기능에 대한 컴파일러 지원

분류:알골 프로그래밍 언어 계열
분류:C++
분류:C++ 프로그래밍 언어 계열
분류:정적 타입 프로그래밍 언어
분류:고급 프로그래밍 언어