Прошу ревью кода (С++, stl, ~140 строк)
Давно с C++ дел не имел, но вроде у вас перегруженный оператор вывода в поток с ошибкой. Он всегда выводит в cout, даже если левый опреанд будет файлом или еще каким потоком.
В детали не вдавался, то что бросилось в глаза сразу:

if(x > y)
            return std::make_pair(y, x);
        else
            return std::make_pair(x, y);


заменить на 
return x > y ? std::make_pair(y, x) : std::make_pair(x, y);


или на 
return std::make_pair(x > y ? y : x, x > y ? x : y);


Так же кое где пишите auto, где то явно указываете например int? Должна быть единая стилистика.