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

Reply via email to