C++ の TMP (template meta programming) がチューリング完全である、という表現はしばしば見受けられるが、それが具体的にどういう意味でチューリング完全であるのかが、いまいちピンときていなかった自分への備忘録。
http://stackoverflow.com/a/275295/3090068 に、具体例が載っている。
何をやっているかというと、テンプレートによるコンパイル時計算において、テンプレートによってチューリングマシンを構築し、かつそのチューリングマシンはテンプレートの実体化計算によって実行されるようになっている。
- 遷移関数(の定義): テンプレートでタプル的に表現される && それが typelist に
- テープ: typeList
- 実行: コンパイル時 type の解決計算