#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