From 5ffa3fd2f6417d0e663e0179e675f2f8c639f3f9 Mon Sep 17 00:00:00 2001 From: Andrzej Krzemienski Date: Fri, 19 Feb 2016 01:51:08 +0100 Subject: [PATCH] turned a complicatedcondition in enable_if into a metafun --- include/boost/optional/optional.hpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/include/boost/optional/optional.hpp b/include/boost/optional/optional.hpp index 10b46ef..3d89928 100644 --- a/include/boost/optional/optional.hpp +++ b/include/boost/optional/optional.hpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -564,6 +565,19 @@ class optional_base : public optional_tag storage_type m_storage ; } ; + +template +struct is_optional_related + : boost::conditional::type>::value + || boost::is_same::type, none_t>::value, + boost::true_type, boost::false_type>::type +{}; + +template +struct is_optional_val_init_candidate + : boost::conditional::value, boost::true_type, boost::false_type>::type +{}; + } // namespace optional_detail template @@ -652,9 +666,7 @@ class optional : public optional_detail::optional_base template explicit optional ( Expr&& expr, - BOOST_DEDUCED_TYPENAME boost::disable_if_c< - (boost::is_base_of::type>::value) || - boost::is_same::type, none_t>::value >::type* = 0 + BOOST_DEDUCED_TYPENAME boost::enable_if< optional_detail::is_optional_val_init_candidate >::type* = 0 ) : base(boost::forward(expr),boost::addressof(expr)) {} @@ -691,11 +703,7 @@ class optional : public optional_detail::optional_base #ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES template - BOOST_DEDUCED_TYPENAME boost::disable_if_c< - boost::is_base_of::type>::value || - boost::is_same::type, none_t>::value, - optional& - >::type + BOOST_DEDUCED_TYPENAME boost::enable_if, optional&>::type operator= ( Expr&& expr ) { this->assign_expr(boost::forward(expr),boost::addressof(expr));