Ответ 1
Существует большая цепочка множественных наследований, в верхней части которой есть несколько классов, которые реализуют операторы, но делают это как функции friend
, тем самым помещая их в охватываемое пространство имен, а не как члены класса.
Например, окончательная реализация operator+
становится:
template <class T, class U, class B = ::boost::detail::empty_base<T> >
struct addable2 : B
{
friend T operator +( T lhs, const U& rhs ) { return lhs += rhs; }
friend T operator +( const U& lhs, T rhs ) { return rhs += lhs; }
};