ソースコード貼ると盛り上がるねw
オペレータは自分では定義しないし、使ったソースは読まないと言われたので、今度はそれを使わない例。

#include <iostream>

namespace X
{
template <typename T>
void print(T) { std::cout << "X\n"; }

template <typename T>
void print_2(T x) { print(x); print(x); }
}

namespace Y
{
struct D {};
void print(D) { std::cout << "Y\n"; }
}

int main()
{
Y::D a;
X::print_2(a);
return 0;
}

何て出力されるかな?