У меня есть что-то вроде этого:
#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? Серьезные причины? Было бы неплохо, например. в этом случае. Благодаря