When authoring a library in a particular namespace, it's often convenient to provide overloaded operators for the classes in that namespace. It seems (at least with g++) that the overloaded operators can be implemented either in the library's namespace:
namespace Lib {
class A {
};
A operator+(const A&, const A&);
} // namespace Lib
or the global namespace
namespace Lib {
class A {
};
} // namespace Lib
Lib::A operator+(const Lib::A&, const Lib::A&);
From my testing, they both seem to work fine. Is there any practical difference between these two options? Is either approach better?