
AMDG Daniel Hulme wrote:
On Wed, Jun 03, 2009 at 07:38:51PM +0100, Joseph Gauterin wrote:
I'm pretty sure the intent of the code is to replace the generic swap-by-copy-assignment std::swap template
The intent is to replace std::swap with a call a specialized swap (via ADL) or to call boost::detail::move_swap::swap otherwise. std::swap will never be called from that function, unless std::swap is picked up by ADL - in which case it probably *is* specialized for the type being swapped. By making boost::detail::move_swap::swap less specialized than std::swap, you can stop the ambiguity that happens only in this case.
OK, yes, I'll buy that. I'm not convinced that there is nothing in ::std without a std::swap specialization, but I guess I am convinced that for any of those things it makes no difference whether we call std::swap or detail::move_swap::swap. Maybe.
classes in namespace std are not a problem. In the worst case, we could enumerate them. The real problem is that arbitrary user defined types can have namespace std as an associated namespace. In Christ, Steven Watanabe