Метапрограммирование не решается внешним шаблонизатором. Потому,
что последний работает исключительно на уровне исходного текста.
Это совсем не то, потому, что шаблоны в C++ работают не на уровне
отдельных буковок, а в пространстве типов языка. Это совсем другая
история. Чтоб повторить то же самое во внешнем макропроцессоре на
нём придётся написать половину компилятора C++, что очевидно
невозможно. Внешний шаблонизатор не сможет, например, генерировать
разный код в зависимости от свойств типа переданного ему параметром шаблона. Он может только тупо подставлять текст. Для такой задачи вообще существует C-препроцессор. Я раньше писал, что C++ -- на самом деле это три разных языка: C-препроцессор, C-с-классами, и система программирования в пространстве типов (шаблоны). И любая составляющая здесь -- нужная, для своих задач. У многих языков остаётся только C-с-классами. C-препроцессор для студентов тоже сложный, ноги прострелят...