Asymmetry of user-difined swap and distance

Maxim Dementiev max@e-soft.ru
Fri Aug 7 14:16:00 GMT 2009


Hi,

Let's have a look at std::pair<>::swap and std::lower_bound<> implementations.

1. pair::swap in http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/bits/stl_pair.h?view=markup

       void
       swap(pair& __p)
       {
         using std::swap;
         swap(first, __p.first);
         swap(second, __p.second);
       }

2. lower_bound in http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/bits/stl_algo.h?view=markup

       _DistanceType __len = std::distance(__first, __last);

Now we need to use user-defined versions of swap and distance for corresponding types when we work with STL.

It means that swap for user types could be defined either in std namespace or in the user type namespace (argument-dependent name 
lookup).

On the other hand, distance (advance, etc.) for user types must be defined in std namespace.

How come? Why this asymmetry?

Should we always extend std namespace?

Regards,
Maxim P. Dementiev



More information about the Libstdc++ mailing list