컴파일 흐름

함수 템플릿 컴파일 흐름

한 번 작성한 함수 틀은 호출 지점에서 타입을 추론하고, 사용 가능한 연산인지 확인한 뒤 실제 함수 코드로 인스턴스화됩니다.

01

템플릿 정의

타입이 바뀌어도 같은 알고리즘이면 T로 자리를 남깁니다.

template <typename T>
T max(T a, T b)
02

타입 추론

호출 인자의 타입을 비교해 T가 무엇인지 결정합니다.

max(10, 20) -> T=int
03

제약 확인

본문의 연산을 해당 타입이 지원하는지 컴파일 단계에서 봅니다.

a > b 가능?
04

인스턴스화

필요한 타입에 맞는 실제 함수 코드가 만들어집니다.

int max(int, int)
05

코드 재사용

double, string 같은 다른 타입도 같은 정의에서 출발합니다.

max<double>(x, y)
OK

타입과 연산이 맞는 경우

컴파일러가 구체 함수를 생성하고, 호출 코드는 일반 함수처럼 실행됩니다.

ERROR

추론이 모호하거나 연산이 없는 경우

예를 들어 서로 다른 타입을 하나의 T로 맞출 수 없거나, T가 비교 연산을 지원하지 않으면 컴파일 오류가 납니다.