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