AI 요약
C++26에서는 언어의 명확성과 C 호환성을 개선하기 위해 '옥스퍼드 가변 인자 콤마(Oxford Variadic Comma)'라고 불리는 P3176R1 제안을 수용합니다. 이 제안의 핵심은 C 스타일 가변 인자(ellipsis)를 선언할 때 앞에 콤마를 생략하는 방식을 공식적으로 사용 중단(deprecation)하는 것입니다. C 표준은 C89 시절부터 void f(int, ...) 형식을 의무화했으나, C++은 초기 호환성을 위해 void f(int...) 형식을 허용해 오며 두 언어 간의 미묘한 불일치를 방지하지 못했습니다. 특히 C++11에서 템플릿 파라미터 팩(T...)이 도입된 이후, 개발자들은 (T...)가 가변 인자인지 파라미터 팩인지 혼동하는 경우가 많아졌습니다. 이번 변화는 즉각적인 코드 오류를 발생시키지는 않지만, 향후 새로운 언어 기능을 위한 문법적 공간을 확보하고 코드의 의도를 명확히 하는 데 중점을 둡니다.
핵심 인사이트
- P3176R1 제안 도입: C++26에서 콤마 없는 생략 부호 매개변수 선언을 사용 중단(Deprecated) 처리함.
- C 언어와 호환성 일치: C89 표준 이후 줄곧 콤마를 필수로 요구했던 C 언어의 규칙과 C++의 규칙을 일치시킴.
- C++11 파라미터 팩과의 충돌 방지:
(T...)문법이 가변 인자 매개변수가 아닌 템플릿 파라미터 팩으로 오인되는 시각적 혼란을 제거함. - 기계적 코드 변환 가능: 단순한 콤마 추가만으로 수정이 가능하여 툴링(tooling)을 통한 자동화된 코드 수정이 용이함.
주요 디테일
- 선택적 문법의 종료: 기존에는
void f(int, ...)와void f(int...)가 모두 허용되었으나, 후자는 오직 C++에서만 유효했음. - 기괴한 문법의 정리: 현재 규칙상
void f(auto... ...)와 같이 연속된 6개의 점을 사용하는 문법이 가능했으나, 이번 조치로 이러한 가독성 저해 요소가 해결됨. - 단독 생략 부호 유지: 매개변수가 없는
void f(...)형태는 이번 사용 중단 대상에서 제외되어 여전히 유효하게 유지됨. - 이미 발견된 패턴: GitHub 코드 검색 결과
T......와 같은 복잡한 패턴이 이미 수십 건 이상 존재함이 확인되었으며, 이에 대한 정리가 필요함. - 단계적 폐지: 이번 조치는 'Pure Deprecation'으로, 기존 코드가 즉시 컴파일되지 않는 'ill-formed' 상태가 되지는 않음.
향후 전망
- 신규 기능 도입 가속화:
(int...)와 같은 문법이 점유하던 공간이 비워짐에 따라, 이를 활용한 미래의 언어 기능 제안들이 가능해질 것으로 기대됨. - 코드 현대화: 컴파일러 경고를 통해 개발자들이 점진적으로 더 명확한 C++ 문법을 사용하도록 유도하여 전반적인 코드 품질이 향상될 것임.
