かくしてtemplateによってC++は2レベル(コンパイル時/実行時)言語になってしまっているいるわけだが、
元々そういう用途を意図して設計しているわけではないので、
この2レベルで激しく構文が違ってしまっているという問題はある。

例えば……:
template引数にはクラス・オブジェクトはおろか整数定数しか渡せない。
書きなれた命令型ではなく関数型プログラミングのスタイルで書かなければならない。
コンパイル時関数を表現するのにtemplateクラスを定義するのはやっぱ無理がある。

というわけでプログラミング言語学的には今後の研究が待たれるところであるっす。