char + int приведется к int. int + char тоже приведется к int. А теперь: Code (Text): template <class T1, class T2> ??? operator + (pixel<T1> const& p1, pixel<T2> const& p2) { return ???; } Как определить, каким должен быть результат? Мне пока что ничего лучше этого в голову не приходит: Code (Text): template <class T1, class T2> typename type_traits<T1, T2>::greater operator + (pixel<T1> const& p1, pixel<T2> const& p2) { typename type_traits<T1, T2>::greater result; result.r = p1.r + p2.r; result.g = p1.g + p2.g; result.b = p1.b + p2.b; return result; }