The recommended way is to overload swap for your type, not specialize std::swap. As long as that case still works, the rest might be acceptable...
At the time boost::swap was created, my motivating use case involved use of
multiple 3rd party libraries. Some provided swap through ADL, others by
specialising std::swap. Both techniques are legal and there's no clear
technical advantage to either (I prefer the ADL solution since I find code
that opens the std namespace to look 'wrong' - but that's a matter of
taste).
I'm not at all keen on users upgrading from boost 1.38.0-1.54.0 to a newer
version and finding that their O(1) swap has turned into 3 calls to an O(n)
copy because the author of a library they depend on used a technique which
has since fallen out favour due to a consensus forming around the
alternative.
Joe
On Tue, Jul 30, 2013 at 8:51 AM, Marc Glisse
On Mon, 29 Jul 2013, Joseph Gauterin wrote:
Given a user define types that specializes std::swap but isn't moveable (a
reasonable scenario for C++03 code still being compiled with a C++03 compiler), wouldn't this change result in 3 copies instead of a single call to the specialized std:swap?
The recommended way is to overload swap for your type, not specialize std::swap. As long as that case still works, the rest might be acceptable...
-- Marc Glisse
______________________________**_________________ Unsubscribe & other changes: http://lists.boost.org/** mailman/listinfo.cgi/boosthttp://lists.boost.org/mailman/listinfo.cgi/boost