При создании библиотеки в определенном пространстве имен часто бывает удобно предоставлять перегруженные операторы для классов в этом пространстве имен. Кажется (по крайней мере, с g++), что перегруженные операторы могут быть реализованы либо в пространстве имен библиотеки:
namespace Lib {
class A {
};
A operator+(const A&, const A&);
} // namespace Lib
или глобальное пространство имен
namespace Lib {
class A {
};
} // namespace Lib
Lib::A operator+(const Lib::A&, const Lib::A&);
Из моего тестирования они оба работают нормально. Есть ли какая-либо практическая разница между этими двумя вариантами? Улучшен ли подход?