타입 경계

C++20 타입 제약

Concepts, `if constexpr`, `consteval`, `constinit`은 모두 “언제 결정할 것인가”를 명확히 하는 도구다. 공개 API, 템플릿 분기, 즉시 계산, 정적 초기화를 서로 다른 문제로 구분한다.

Concepts

템플릿의 입력 조건을 이름 붙인다

공개 템플릿 API에서 `std::integral`이나 `Addable` 같은 제약으로 오용을 빨리 차단한다.

template<Addable T>
if constexpr

타입별 분기를 컴파일 타임에 제거한다

산술 타입, 문자열, 사용자 정의 타입처럼 분기별 코드가 다를 때 안전하게 나눌 수 있다.

if constexpr (std::is_arithmetic_v<T>)
consteval

반드시 컴파일 타임 결과 요구

런타임 값으로 호출되면 오류가 나므로, 테이블 생성이나 고정 규칙 계산에 적합하다.

consteval int square(int x)
constinit

전역/정적 객체의 초기화 시점 고정

`constexpr`처럼 상수 값 자체를 강제하기보다, 정적 초기화 안정성을 보장한다.

constinit int g_retry_limit = 3;
먼저 적용할 곳 라이브러리 public 템플릿 함수, 빌드가 안정된 코어 모듈, 정적 객체가 얽힌 초기화 경계부터 작게 적용한다.
C++23와 이어지는 흐름 `Concepts`로 타입 경계를 고정한 뒤 `std::expected`로 오류 경로를 타입으로 표현하면 API 의도가 더 선명해진다.