Commençons par la structure qui décrit une expression :
1 2 3 4 5 6
template <class A> struct PExprGen{ operator const A&() const{ return *static_cast<const A*>(this); } };