A public function is scoped to the class in which it is
declared. If declared non-static, then it must be invoked against
an instance of the class but if declared static then namespace
resolution is required to access the function.
A non-member function is not scoped to any class but may be
scoped to a namespace. If no namespace is specified, then it is
scoped to the (unnamed) global namespace. If scoped to any other
namespace then namespace resolution is required to access the
function.