GCC 15의 새로운 C++ 기능들

2 days ago 3

  • 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 지원

Read Entire Article