- Chromium 프로젝트는 최신 C++ 표준 기능의 사용 범위와 금지 항목을 명확히 정의해 코드 일관성과 보안성을 유지함
-
C++11~C++23까지 각 표준별로 허용·금지·검토(TBD) 상태가 구분되며, Abseil 라이브러리도 동일한 기준을 적용받음
- 금지된 기능에는 std::shared_ptr, std::function, std::regex, std::filesystem, std::byte, char8_t, modules 등이 포함
- 허용된 기능으로는 concepts, spaceship 연산자, designated initializer, std::to_underlying, std::ranges 알고리듬 등이 있음
- 이 가이드는 Chromium과 하위 프로젝트 전체에 적용되며, 코드 안정성과 빌드 호환성 확보를 위한 핵심 기준으로 작동함
Chromium의 Modern C++ 사용 정책
- Chromium은 최신 C++ 표준을 즉시 도입하지 않고, 도구체인 지원이 충분히 확보된 후 ‘초기 지원(initially supported)’ 상태로 지정
- 이후 기능별로 허용(allowed) , 금지(banned) , 검토 중(TBD) 상태로 분류
- 새로운 기능의 상태 변경은 cxx@chromium.org 메일링 리스트를 통해 제안 가능
- 초기 지원 후 2년이 지나면, 명시적 검토를 거쳐 허용 또는 금지 목록으로 이동
C++11 금지 기능
-
언어 기능: inline namespace, long long, 사용자 정의 리터럴(user-defined literals)
-
라이브러리 기능: <chrono>, <regex>, <random> 엔진, <exception>, <ratio>, <thread> 등
- 예외(exception)는 완전히 비활성화되어 있으며, noexcept만 허용
-
std::bind, std::function, std::shared_ptr, std::weak_ptr 대신 base::Bind, base::Callback, base::RefCounted 사용
C++17 금지 기능
-
UTF-8 문자 리터럴(u8) 금지, char8_t와의 호환성 문제 때문
-
라이브러리 금지 항목:
- 수학 특수함수, 병렬 알고리듬(parallel algorithms), std::any, std::byte, std::filesystem, std::pmr 메모리 리소스 등
- 병렬 알고리듬은 libc++ 미지원 및 Chrome의 스레딩 모델과의 충돌 우려로 금지
C++20 허용 및 금지 기능
-
허용된 언어 기능:
-
concepts, consteval, designated initializers, spaceship 연산자, [[likely]] , range-for 초기화 구문
-
허용된 라이브러리 기능:
-
<bit>, <compare>, <concepts>, <numbers>, std::erase_if, std::ranges::subrange, std::to_underlying 등
-
금지된 기능:
-
char8_t, modules, [[no_unique_address]] , std::bit_cast, <span>, std::bind_front, std::ranges::view_interface
-
검토 중(TBD): coroutine, <format>, <source_location>, std::u8string
C++23 허용 및 검토 기능
-
허용된 언어 기능: #elifdef, if consteval, 정적 연산자(static operator)
-
허용된 라이브러리 기능: std::byteswap, std::basic_string::contains, std::to_underlying, std::ranges 확장 알고리듬
-
검토 중 기능: std::expected, std::mdspan, std::generator, std::stacktrace, std::print, [[assume]], #warning 등
Abseil 라이브러리 정책
-
금지된 Abseil 구성요소:
-
absl::any, absl::optional, absl::StatusOr, absl::Span, absl::FunctionRef, absl::Mutex, absl::Time, absl::btree_* 등
- 대부분은 Chromium의 base 네임스페이스 구현체로 대체 (base::span, base::expected, base::Bind 등)
-
검토 중(TBD): absl::linked_hash_set, absl::linked_hash_map
전반적 의미
- Chromium은 표준 C++ 기능을 무조건 수용하지 않고, 빌드 안정성·보안·성능·코드 일관성을 기준으로 선별 적용
- 금지된 기능 대부분은 중복 구현(base::) 또는 도구체인·ABI 호환성 문제로 인한 것
- 이 가이드는 Chromium 생태계의 C++ 코드 품질 관리 기준서로, 오픈소스 협업 시 필수 참조 문서로 기능함