Modify

Ticket #7620 (closed Patches: fixed)

Opened 2 years ago

Last modified 2 years 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 2 years ago.
rvalue_test.cpp Download (5.1 KB) - added by apolukhin 2 years ago.
Boost.Test for rvalue support of variant
move_perf.cpp Download (6.5 KB) - added by apolukhin 2 years ago.
Performance test for new rvalue methods

Change History

Changed 2 years ago by apolukhin

Changed 2 years ago by apolukhin

Boost.Test for rvalue support of variant

Changed 2 years ago by apolukhin

Performance test for new rvalue methods

comment:1 Changed 2 years ago by apolukhin

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

comment:2 Changed 2 years 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 2 years ago by apolukhin

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

comment:4 Changed 2 years 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.