У меня есть что-то вроде этого:
#include <iostream>
namespace N
{
   typedef std::pair<int, double> MyPair;
   std::ostream& operator << (std::ostream& o, MyPair const & mypair)
   {
      ///
   }
}
int main()
{
    N::MyPair pr;
    std::cout << pr;
}
Это, естественно, не работает, потому что ADL не найдет operator<<, потому что namespace N не связан с MyPair (к сожалению). Afaik нельзя добавить в пространство имен std, поэтому, если бы я решил определить operator << в std, что было бы незаконным. Итак... что делать в таких ситуациях? Я не хочу явно квалифицировать operator <<, и я не хочу писать using namespace N. Итак, вопросы:
- Как реорганизовать код?
 - Почему ADL не связывает пространства имен typedefs? Серьезные причины? Было бы неплохо, например. в этом случае. Благодаря