C++ 함수 템플릿

함수 템플릿 추론

함수 템플릿은 하나의 구현을 여러 타입에 맞게 인스턴스화한다. 추론 가능한 타입, 명시해야 하는 타입, overload와 specialization 후보가 어떻게 경쟁하는지 확인해야 한다.

01

호출 후보

일반 함수, 함수 템플릿, overload 후보를 먼저 모은다.

후보 집합
02

타입 추론

함수 인자와 매개변수 패턴을 맞춰 T와 참조/const를 결정한다.

반환 타입만으로는 부족
03

제약 검사

concept, requires, SFINAE 조건을 통과하지 못하면 후보에서 제거된다.

진단 품질
04

인스턴스화

선택된 타입으로 본문을 컴파일하며 사용한 연산이 유효해야 한다.

late error 가능
T
값 매개변수는 decay 배열과 함수는 포인터로, top-level const는 사라질 수 있다.
auto와 유사
T&
lvalue 참조만 임시 값은 받을 수 없고 const 여부가 T 추론에 반영된다.
수정 가능성
T&&
forwarding reference 후보 템플릿 추론 문맥에서는 lvalue/rvalue를 모두 보존할 수 있다.
std::forward
explicit T
추론 불가 타입 지정 반환 타입이나 정책 타입처럼 인자에서 나오지 않는 T는 명시가 필요하다.
API 형태

제약 · 전달 · overload 점검

제약 본문 오류로 길게 터지기 전에 concept으로 필요한 연산을 제한한다.
전달 완전 전달 함수는 std::forward<T>와 forwarding reference 조건을 함께 확인한다.
overload 템플릿보다 일반 함수가 더 적합한 후보가 되는 경우를 테스트한다.