Listing 8: Definition and usage of expression templates

template <class ExprT> struct exprTraits 
{ typedef ExprT expr_type; };

template <> struct exprTraits<double> 
{ typedef Literal expr_type; };

template <> struct exprTraits<int> 
{ typedef Literal expr_type; };

...

double sigma=2.0, mean=5.0;
const double Pi = 3.141593;
cout << integrate(
  1.0/(sqrt(2*Pi)*sigma) * exp(sqr(x-mean)/(-2*sigma*sigma)),
  2.0,10.0,100) << endl;

— End of Listing —