원래 C++에서 템플릿을 추가한 동기는 정말 단순했다.

사용자가 타입에 관계없는 컨테이너를 만들어 사용할 때 타입 안정성을 부여하기 위함이었는데…

그런데 이 템플릿을 다양한 곳에 사용하며 할 수 있는 일들이 많이 발견되었다

일반화 프로그래밍(조작할 객체의 타입과 상관없이 코드를 작성하도록 하는 개념)은 STL 알고리즘인 for_each, find, merge를 구성하고 있고,

C++ 템플릿 메커니즘은 튜링 완전(Turing-complete)성을 갖고 있어, 컴파일러 내부에서 실행되어 컴파일이 끝날 때 실행을 멈추는 템플릿 메타프로그래밍 영역이 확대되었다

(튜링 완전성 - 프로그래밍 언어나 추상 머신이 튜링 머신과 동일한 계산 능력을 가짐)

템플릿의 활용도는 다양하지만, 템플릿 기반 프로그래밍의 기저에는 몇 개 되지 않는 핵심 아이디어가 있고 이 아이디어가 무엇인지를 아는 것이 이번 장의 핵심!