Ticket #7620 (closed Patches: fixed)
Basic rvalue and C++11 support
|Reported by:||apolukhin||Owned by:||ebf|
This patch adds variant(variant&&), variant& operator=(variant&&) and template <class T> variant& operator=(T&&) functions to Boost.Variant for compilers with rvalue references support (rvalue emulation via Boost.Move is not used for compatability reasons).
template <class T> variant& operator=(T&&) function is enabled only if T&& is a rvalue reference.
Patch is constructded via copying original assign functions and adding move semantics to them. Example: Visitor copy_into was copied as move_into. Copy constructors in internal_visit functions were replaced by move constructors.
If compiler supports rvalue references, std::move is imported to namespace ::boost::detail::variant (this also worked around bug with unqualified call to move() in MSVC2010)
BOOST_NOEXCEPT modifiers added to some methods.
This patch improves performance up to 6 times for some operations. Was tested on GCC-4.6 (with and without c++11 mode) and MSVC2012.
- Status changed from new to closed
- Resolution set to fixed