- GCC 15는 C++26 기능을 대거 추가했으며, 일부 C++23 기능도 개선했음
- 주요 추가 기능은 Pack Indexing, Variadic Friends, 삭제 이유 명시, 구조적 바인딩 조건문 등
- 새로운 컴파일러 옵션과 경고들도 도입되어 개발자 경험이 향상됨
- C++ 모듈 지원이 강화되었고, 템플릿 컴파일 속도 최적화가 이루어졌음
- GCC 15은 Fedora 42 기본 컴파일러로 채택되었고, 곧 Red Hat GCC Toolset에도 제공될 예정임
GCC 15의 새로운 C++ 기능
-
GCC 15.1은 2025년 4월 25일에 출시 되었으며, C++26 기능을 본격적으로 도입함
- 여전히 기본 표준은 gnu++17이며, -std=c++23, -std=c++26 등으로 최신 기능 활성화 가능함
- C++20, C++23, C++26 기능은 아직 **실험적(experimental)**임
C++26 주요 기능
-
Pack Indexing
- Variadic Template 인자에서 특정 요소를 pack...[N] 문법으로 직접 접근할 수 있게 됨
- 반복 트릭 없이 깔끔하게 첫 번째 인자 등을 참조 가능함
-
Structured Bindings 속성 지정
- 구조적 바인딩된 각각의 변수에 별도로 [[attribute]]를 적용할 수 있게 됨
- 예시로, 특정 바인딩 변수만 [[deprecated]] 처리 가능함
-
삭제 함수에 설명 추가
-
= delete("이유") 문법으로 삭제된 함수의 호출 에러에 메시지를 제공할 수 있음
-
Variadic Friends
- 템플릿 클래스에서 여러 타입을 한번에 friend 선언 가능함
-
Passkey 패턴처럼 접근 제어 강화에 유용함
-
constexpr Placement New
-
std::allocator와 placement new를 constexpr 컨텍스트에서 사용할 수 있음
-
구조적 바인딩을 조건문에 사용
-
if, while, switch 조건문 안에서 구조적 바인딩 선언 가능함
- 조건 판별은 컴파일러가 생성한 내부 변수에 의해 수행됨
-
불완전 타입 삭제 금지
-
delete나 delete[]가 불완전 타입에 대해 사용될 경우, C++26 모드에서는 컴파일 에러 발생함
-
옥스포드 콤마 경고
- Variadic 함수 선언 시 , ... 없이 ...만 사용하는 패턴을 C++26에서 경고 처리함
-
배열 비교 제거
- 배열끼리 == 비교하는 코드를 오류로 처리
- 기존 C++20에서는 경고였으나, 이제는 C++26 모드에서 컴파일 오류로 격상됨
-
#embed 지시어
- 바이너리 데이터를 소스 코드에 직접 삽입할 수 있는 #embed 지원