template<int n> struct data { enum {
 value = data<n-1>::value * data<n-1>::value + 1
}; };
template<> struct data<1> { enum {
 value = 1 // X1's val
}; };

とか言ってる。