Каким образом operator>> попадает в глобальное прогстранство имён?
Тебе стоит ознакомиться с понятием ADL.Because of argument-dependent lookup, non-member functions and non-member operators defined in the same namespace as a class are considered part of the public interface of that class (if they are found through ADL)
Т.е. любая внешняя перегрузка оператора для некоторого типа, определенная в пространстве имен этого типа, является частью интерфейса этого типа и доступна через ADL.
Также через ADL доступны и дружественные функции, определенные по месту объявления дружественности и не имеющие предшествующего объявления.
В итоге, operator>> никакими магическими силами не переносится в глобальное пространство имен. Он просто находится по ADL, т.к. правильно реализован и является частью интерфейса соответствующего типа.
// Как? Ведь std::operator>> определён в std, а мы его не импортировали
    std::cin >> size;
Он определён не в std, а в виде inline метода класса basic_istream (файл istream):
basic_istream& __CLR_OR_THIS_CALL operator>>(int& _Val);
Получается, сперва ищется внешняя функция, если не нашлось, то используется метод класса.