Here's a thought about the direct use of r-value references vs. pass by value argument: We are planning on providing a version which is supposed to support compilers without move semantics. However, these implementations are close to, perhaps even exactly identical to the code that would take advantage of move semantics via pass by value. Say we allowed a user-accessible define which would allow the programmer to decide? something like: // BOOST_HAS_RVALUE_REFS is a feature availability check // BOOST_UNSAFE_MOVE is user-definable override to use faster, unsafe version #if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_UNSAFE_MOVE) // use 4 overload version #else // use pass-by-value version #endif If the user is more concerned with safety over micro-optimizations, the default behavior would resort to pass by value (good for backwards compatibility). However, the user would have the option available to easily use the faster version if they deem it necessary.