Asymmetry of user-difined swap and distance
Jonathan Wakely
jwakely.gcc@gmail.com
Fri Aug 7 18:19:00 GMT 2009
2009/8/7 Maxim Dementiev:
>
> It means that swap for user types could be defined either in std namespace
> or in the user type namespace (argument-dependent name lookup).
Yes, this is intentional. swap() is a point of customisation point,
see http://www.ddj.com/cpp/184401876 and the definition in
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1691.html
> On the other hand, distance (advance, etc.) for user types must be defined
> in std namespace.
There is no need to customise std::distance(), or certainly a lot less
need, because the Standard Library can provide optimal implementations
for all possible iterator categories. The generic swap() function in
namespace std won't even work with some types and is sub-optimal for
others.
Jonathan
More information about the Libstdc++
mailing list