template< class FirstValue, class SecondValue, class ResultValue > struct add: public std::binary_function< FirstValue, SecondValue, ResultValue > { ResultValue operator()(FirstValue n1, SecondValue n2) const { return ResultValue(n1+n2); } }; //call dest = add< T, T, T >()(src0), src1);