From 4f81882bfd8c336db43fd0fab33ed5550138c365 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 22 Jan 2020 18:30:36 +0200 Subject: [PATCH] Explicitly disable move constructor when needed --- include/boost/variant2/variant.hpp | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index 61e113e..0b0d9c9 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -1238,9 +1238,28 @@ public: } // namespace detail +// disable_move_constructor + +namespace detail +{ + +template struct disable_move_constructor; + +template<> struct disable_move_constructor +{ +}; + +template<> struct disable_move_constructor +{ + disable_move_constructor() = default; + disable_move_constructor( disable_move_constructor && ) = delete; +}; + +} // namespace detail + // variant -template class variant: private detail::variant_copy_base +template class variant: private detail::variant_copy_base, private detail::disable_move_constructor...>::value> { private: @@ -1259,8 +1278,8 @@ public: #if !BOOST_WORKAROUND( BOOST_MSVC, < 1910 ) - variant( variant const& ) = default; - variant( variant && ) = default; + // variant( variant const& ) = default; + // variant( variant && ) = default; #else @@ -1314,8 +1333,8 @@ public: #if !BOOST_WORKAROUND( BOOST_MSVC, < 1910 ) - variant& operator=( variant const& ) = default; - variant& operator=( variant && ) = default; + // variant& operator=( variant const& ) = default; + // variant& operator=( variant && ) = default; #else