#7620 closed Patches (fixed)
Basic rvalue and C++11 support
Reported by: | Antony Polukhin | Owned by: | ebf |
---|---|---|---|
Milestone: | Boost 1.53.0 | Component: | variant |
Version: | Boost 1.52.0 | Severity: | Optimization |
Keywords: | Cc: | antoshkka@… |
Description
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.
Attachments (3)
Change History (7)
by , 10 years ago
Attachment: | rvalue_move.patch added |
---|
by , 10 years ago
Attachment: | rvalue_test.cpp added |
---|
comment:1 by , 10 years ago
comment:2 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:4 by , 10 years ago
Milestone: | To Be Determined → Boost 1.53.0 |
---|
Boost.Test for rvalue support of variant