#include #include namespace boost{ namespace math{ template class U> U test(const U& t) { using std::abs; return abs(t); } template struct numeric { numeric(){ m_value = 0; } explicit numeric(T t){ m_value = t; } T value()const { return m_value; } private: T m_value; }; template numeric operator+(const numeric& a, const numeric& b) { return numeric(a.value() + b.value()); } template numeric abs(const numeric& a) { using std::abs; return numeric(abs(a.value())); } } } int main() { boost::math::numeric num(2); boost::math::test(num); return 0; }