Reputation: 51435
If I have have some overloaded ostream operators, defined for library local objects, is its okay for them to go to std namespace? If I do not declare them in std namespace, then I must use using ns:: operator <<
.
As a possible follow-up question, are there any operators which should go to standard or global namespace?
Upvotes: 16
Views: 4058
Reputation: 2639
operator<<( ..., MyClass )
should go in the same namespace as MyClass
. You should think of it as part of the interface of MyClass
, even though it happens to be (necessarily) a non-member function.
A couple of references:
Upvotes: 25
Reputation: 101446
The C++ Standard explicitly forbids you from declaring your own constructs in the std namespace.
Upvotes: 8
Reputation: 99535
According to Koenig Lookup (C++ Standard 3.4.2) operator<<
will be searched in namespaces of arguments. No need to declare it in std
namespace.
Upvotes: 26
Reputation: 754535
It is generally a bad practice to declare anything (types, operators, etc ...) to be a part of a namespace you do not own. This can have unexpected consequences for people consuming your library. A better solution is to define your own namespace and to import both std
and your namespace when you need to combine solutions.
Upvotes: 2