といえばやねうらおさんも考察されていたわけですけど (http://www.sun-inet.or.jp/~yaneurao/newlang/chap0000.html)、 ぶっちゃけ気合い入ったプリプロセッサってスクリプト言語になるわけで、…つまり eruby で書いちまえ。
Typelist1 から 4 を
template Typelist1(T1) { alias Typelist!(T1, NullType) value; } <%= (2..30).collect do |i| "template Typelist#{i}(" + (1..i).collect do |j| "T#{j}" end.join(', ') + ") {\n" + " alias Typelist!(T1, Typelist#{i-1}!(" + (2..i).collect do |j| "T#{j}" end.join(', ') + ").value) value;\n" + "}\n" end.join('') %>
で置き替えて、typelist.rbd とかいうファイルに保存、 eruby typelist.rbd > typelist.d でできあがり。実に美しくない解決だと思うのですよ。 boost-dev でもこういう話があったけど無視されてましたなあ…
あと何か Ruby に恨みでもありそうな書き方してみた。