ET + decltype = infix な TMP

template< int N > struct int_{ static int const value = N; };
int_< 1 > _1;
int_< 2 > _2;
int_< 3 > _3;

template< class LHS, class RHS >
int_< LHS::value + RHS::value > operator+( LHS, RHS );
template< class LHS, class RHS >
int_< LHS::value * RHS::value > operator*( LHS, RHS );

decltype( _1 + _2 + _3 ) _6;
decltype( _6 * _2 ) _12;
typedef decltype( _12 ) _12t;
static_assert( _12t::value == 12, "error" );

GCC 4.3 の最新 snapshot で -std=c++0x 付けたら通る.
http://d.hatena.ne.jp/Cryolite/20041209#p7 を思い出し,むしゃくしゃしてやった. infix で書くことができれば何でも良かった.今も反省していない.