어떤 값은 실행하기 전에 정해진다. `constexpr`는 그 계산을 컴파일 타임에 할 수 있다고 표시하고, `auto`는 이미 정해진 식의 타입을 적지 않게 한다.

C++ 24. auto, constexpr, 컴파일 타임의 핵심 흐름도
그림. 컴파일 타임 계산은 의미 있는 상수와 검증에 사용한다.

추론을 정확히

const int n = 3;
auto a = n;            // int
const auto& b = n;     // const int&
constexpr int kFiles = 9;
static_assert(kFiles == 9);

`constexpr` 변수는 상수 식이다. 배열 크기, 템플릿 인자, `static_assert`에 쓸 수 있다. `constexpr` 함수는 인자가 상수 식이면 컴파일 타임에 계산될 수 있고, 아니면 런타임 함수로도 호출된다. C++20의 `consteval`은 반드시 컴파일 타임에만 호출된다.

if constexpr

템플릿 안에서 `if constexpr`의 거짓 가지는 인스턴스화되지 않는다. 일반 `if`는 거짓이어도 가지의 문법이 맞아야 한다. 타입에 따라 전혀 다른 코드를 남길 때 구분한다.

컴파일 타임으로 옮기면 실행이 줄지만, 컴파일 시간과 오류 메시지가 커진다. 상수로 의미가 있는 것만 옮긴다.