[Я бы предпочел удалить этот ответ, но пока оставлю его на случай, если кому-то будет интересно обсуждение.]
Поскольку это разумное расширение библиотеки std, я бы просто поместил ее в пространство имен std, особенно если это одноразовая вещь. Вы можете просто объявить его статическим, чтобы он не вызывал ошибок компоновщика, если кто-то еще сделает то же самое в другом месте.
Другое решение, которое приходит на ум, - это создание оболочки для std :: pair:
template<class A, class B>
struct pairWrapper {
const std::pair<A,B> & x;
pairWrapper(const std::pair<A,B> & x) : x(x) {}
}
template<class A,class B>
std::ostream & operator<<(std::ostream & stream, const pairWrapper<A,B> & pw) { ... }