Modify

Ticket #7620 (closed Patches: fixed)

Opened 18 months ago

Last modified 17 months ago

Basic rvalue and C++11 support

Reported by: apolukhin 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

rvalue_move.patch Download (17.5 KB) - added by apolukhin 18 months ago.
rvalue_test.cpp Download (5.1 KB) - added by apolukhin 18 months ago.
Boost.Test for rvalue support of variant
move_perf.cpp Download (6.5 KB) - added by apolukhin 18 months ago.
Performance test for new rvalue methods

Change History

Changed 18 months ago by apolukhin

Changed 18 months ago by apolukhin

Boost.Test for rvalue support of variant

Changed 18 months ago by apolukhin

Performance test for new rvalue methods

comment:1 Changed 18 months ago by apolukhin

(In [81293]) Added basic rvalue support and marked some functions with BOOST_NOEXCEPT (#refs #7620)

comment:2 Changed 17 months ago by apolukhin

  • Status changed from new to closed
  • Resolution set to fixed

(In [81455]) Merge from trunk: added basic rvalue support and marked some functions with BOOST_NOEXCEPT (fixes #7620)

comment:3 Changed 17 months ago by apolukhin

(In [81456]) Merge from trunk: merge performance tests (refs #7620)

comment:4 Changed 17 months ago by apolukhin

  • Milestone changed from To Be Determined to Boost 1.53.0
View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.