mam coś takiego:ADL z typedefs z innej przestrzeni nazw
#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;
}
To oczywiście nie działa, ponieważ nie ADL znajdzie operator<<
ponieważ namespace N
nie jest związany z MyPair
(niestety). Afaik nie może dodawać do przestrzeni nazw std, więc jeśli zdecyduję się zdefiniować operator <<
w standardzie, byłoby to trochę nielegalne. Więc ... co robić w takich sytuacjach? Nie chcę jednoznacznie kwalifikować operator <<
, ani nie chcę pisać using namespace N
. Tak więc, pytania są następujące:
- Jak zmienić kod?
- Dlaczego ADL nie powinien łączyć przestrzeni nazw typedef? Poważne powody? Byłoby miło, np. w tym przypadku. Dzięki
byłem thinki Sam o tym, ale wydaje mi się to sztuczne dla mnie ... –
@Armen: Co wydaje się sztuczne? –
@Roger: Tworzenie nowej klasy tylko ze względu na ADL –