This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Asymmetry of user-difined swap and distance


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]