
David Abrahams wrote:
But can you come up with a type where it makes sense to have written a custom swap but default-construction + swap won't outperform copy construction?
What do you think of the ticket I recently submitted, requesting custom swap functions for value_initialized<T>? http://svn.boost.org/trac/boost/ticket/2243 After having added value_initialized<T>::swap according to the ticket, it would very much depends upon T whether or not default-construction + swap would outperform copy-construction, for value_initialized<T>.
Do you know how we can technically overrule the default _Move_operation_category<T> provided by MSVC's STL?
If they didn't give us any further hooks (such as a default argument) to hang a specialization on, then sadly I don't know of a way.
Their macro _DEFAULT_MOVE_OPERATION_CATEGORY looks a little bit like a hook, but it wasn't intended that way, as Stephan T. Lavavej told me at http://blogs.msdn.com/vcblog/archive/2008/08/11/tr1-fixes-in-vc9-sp1.aspx A related issue: the trunk version of Boost Optional now allows boost::optional<T>::swap to be tweaked in a similar way, following a request by Thorsten, here at [boost]. Optional's swap function uses default-construction + swap when specified by boost::optional_swap_should_use_default_constructor<T>: http://svn.boost.org/svn/boost/trunk/boost/optional/optional.hpp I think it would be preferable to have Optional's swap tweaking based upon the same type traits that activate "Swaptimization" on MSVC's STL. Kind regards, Niels