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