타입 자리표시자
template <typename T>
T clamp(T,T,T);
T 추론, 명시적 타입 지정, 오버로드 우선순위는 따로 외우기보다 “호출문이 어떤 함수를 만들고 고르는가”로 함께 읽으면 됩니다.
template <typename T>
T clamp(T,T,T);
clamp(7, 0, 10)
// T = int
int clamp(int v,
int lo,
int hi);
// 결과 7
max(10, 3.14) // 오류
max<double>(10, 3.14) // OK
하나의 T가 두 타입을 동시에 뜻할 수 없기 때문입니다.
template <typename T>
requires std::totally_ordered<T>
const T& max_ref(const T& a,
const T& b);
비교 가능한 타입만 후보가 되어 오류 메시지가 짧고 정확해집니다.
max<double>(10, 3.14)
인자가 섞이면 T를 명시해 후보를 좁힌다.
requires ordered<T>
필요 연산을 선언부에 올려 오류를 짧게 만든다.
<double>처럼 명시해야 하는가
+, <, 복사가 해당 타입에서 가능한가