テストコード。 を計算する。N=10 なので、答えは 55 になる。
template <int N> struct sum { static const int value = N + sum<N-1>::value; }; template <> struct sum<0> { static const int value = 0; }; int main() { return sum<10>::value; }
アセンブラコードを吐かせてみる。
$ g++ -O0 -S template-meta.cpp
中身を確認してみる。これは一部だけど、$55 が eax に入って return されることがわかります。ホントに計算されてることが確認できた。
_main: LFB1480: pushl %ebp LCFI0: movl %esp, %ebp LCFI1: subl $8, %esp LCFI2: movl $55, %eax leave ret