ADL с typedefs из другого пространства имен

У меня есть что-то вроде этого:

#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 < <, потому что пространство имен N не связано с MyPair (к сожалению). Afaik нельзя добавлять в пространство имен std, поэтому, если я решил определить оператор << в std, что было бы незаконно. Итак ... что делать в таких ситуациях? Я не хочу явно указывать operator << и не хочу писать с использованием пространства имен N . Итак, вопросы:

  1. Как провести рефакторинг кода?
  2. Почему бы ADL не связывать пространства имен typedef? Серьезные причины? Было бы неплохо, например, в этом случае. Спасибо
15
задан Emile Cormier 20 August 2015 в 21:29
поделиться