Compile Flow

호출문을 보면 T 추론, 연산 검사, 인스턴스화가 순서대로 일어난다

템플릿 정의는 설계도이고, 실제 함수는 호출에 필요한 타입이 확인된 뒤 컴파일러가 만듭니다.

1 정의

타입 자리 남김

template <typename T>
T max(T a, T b);
2 추론

호출 인자 비교

max(10, 20)
// T = int
3 생성

실제 함수 생성

int max(int a, int b)
// 결과 20
판정표

호출이 곧 생성 함수와 오류를 결정한다

호출 컴파일러 판단 결과
max(3.14, 2.71) T = double, 비교 가능 double max(double,double)
max(string("a"), string("b")) T = string, 문자열 비교 가능 "b"
max(10, 3.14) Tint/double로 갈라짐 컴파일 오류
double 3.14, 2.71 T = double 생성 OK
string "a", "b" T = string 결과 "b"
mixed 10, 3.14 T가 갈라짐 컴파일 오류

성공 조건

모든 인자가 같은 T로 맞고, 본문 연산을 그 타입이 지원합니다.

실패 조건

T가 모호하거나, 해당 타입에 비교 같은 필요한 연산이 없습니다.