From a397c16d4c15f63ddc0f280c320719a0d22b5ad9 Mon Sep 17 00:00:00 2001 From: Christopher Hite Date: Mon, 5 Mar 2012 19:43:14 +0000 Subject: [PATCH] used dtor_optimized in destroy for branch free destroy [SVN r77238] --- include/boost/optional/optional.hpp | 4 +++- test/optional_test_trivial_assertions.cpp | 18 +++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/include/boost/optional/optional.hpp b/include/boost/optional/optional.hpp index 602690c..1dbf2a1 100644 --- a/include/boost/optional/optional.hpp +++ b/include/boost/optional/optional.hpp @@ -453,7 +453,9 @@ class optional_base : public optional_tag void destroy() { - if ( m_initialized ){ + if( dtor_optimized::value ) + m_initialized = false ; + else if ( m_initialized ){ destroy_impl(is_reference_predicate()) ; m_initialized = false ; } diff --git a/test/optional_test_trivial_assertions.cpp b/test/optional_test_trivial_assertions.cpp index d96e50d..8913b8f 100644 --- a/test/optional_test_trivial_assertions.cpp +++ b/test/optional_test_trivial_assertions.cpp @@ -36,14 +36,18 @@ BOOST_STATIC_ASSERT( of::copy_optimized::value ); - /* -has_trivial_assign -has_trivial_constructor -has_trivial_copy -has_trivial_copy_constructor -has_trivial_default_constructor -has_trivial_destructor + * The code generated below can be looked at with objdump to see if it is suboptimal */ +void assign_optional_int(oi& x,oi& y){ + x=y; +} + +void reset_optional_int(oi& x){ + x=boost::none; +} + + +