
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 <marc.glisse@inria.fr> wrote:
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/boost<http://lists.boost.org/mailman/listinfo.cgi/boost>