특수화 판단 기준

템플릿 특수화 기준

모든 타입에 같은 의미가 유지되면 기본 템플릿을 두고, 함수만 다르면 오버로딩을 먼저 봅니다. 클래스 구조 자체가 바뀔 때 특수화가 힘을 냅니다.

우선기본 템플릿으로 의미가 유지되는지 확인
함수특수화보다 오버로딩이 더 명확한 경우가 많음
분기C++17 이후는 `if constexpr`로 내부 선택 가능
Primary타입만 달라지고 의미는 같음

`T temp = a;`처럼 모든 타입에 같은 규칙을 적용합니다.

Overload함수 인자 조합만 특별함

`const char*`처럼 더 자연스러운 함수 시그니처가 있으면 오버로드를 검토합니다.

if constexpr컴파일 타임 조건으로 갈림

타입 trait나 concept 결과에 따라 구현 일부만 바꿉니다.

Specialize클래스 저장 방식이 달라짐

`std::vector<bool>`처럼 자료구조 형태 자체가 바뀌는 경우입니다.

C 문자열 소유권

`char*`는 포인터와 문자열 내용의 소유권을 분리해서 봐야 합니다.

부분 특수화

클래스 템플릿에서 포인터, 참조, 컨테이너 같은 패턴 단위로 적용합니다.

읽기 쉬운 선택

특수화가 많아지면 호출되는 구현을 추적하기 어려워집니다.