mirror of
https://github.com/boostorg/variant2.git
synced 2026-01-19 04:42:16 +00:00
Add more constexpr. Refs #53.
This commit is contained in:
@@ -30,6 +30,15 @@
|
||||
|
||||
//
|
||||
|
||||
// constexpr destructors
|
||||
#if defined(__cpp_constexpr_dynamic_alloc) && __cpp_constexpr_dynamic_alloc >= 201907L
|
||||
# define BOOST_VARIANT2_CXX20_CONSTEXPR constexpr
|
||||
#else
|
||||
# define BOOST_VARIANT2_CXX20_CONSTEXPR
|
||||
#endif
|
||||
|
||||
//
|
||||
|
||||
namespace boost
|
||||
{
|
||||
|
||||
@@ -557,16 +566,16 @@ template<class T1, class... T> union variant_storage_impl<mp11::mp_false, T1, T.
|
||||
{
|
||||
}
|
||||
|
||||
~variant_storage_impl()
|
||||
BOOST_VARIANT2_CXX20_CONSTEXPR ~variant_storage_impl()
|
||||
{
|
||||
}
|
||||
|
||||
template<class... A> void emplace( mp11::mp_size_t<0>, A&&... a )
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<0>, A&&... a )
|
||||
{
|
||||
::new( &first_ ) T1( std::forward<A>(a)... );
|
||||
}
|
||||
|
||||
template<std::size_t I, class... A> void emplace( mp11::mp_size_t<I>, A&&... a )
|
||||
template<std::size_t I, class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<I>, A&&... a )
|
||||
{
|
||||
rest_.emplace( mp11::mp_size_t<I-1>(), std::forward<A>(a)... );
|
||||
}
|
||||
@@ -606,22 +615,22 @@ template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, c
|
||||
|
||||
template<std::size_t I, class... A> constexpr variant_storage_impl( mp11::mp_size_t<I>, A&&... a ): rest_( mp11::mp_size_t<I-10>(), std::forward<A>(a)... ) {}
|
||||
|
||||
~variant_storage_impl()
|
||||
BOOST_VARIANT2_CXX20_CONSTEXPR ~variant_storage_impl()
|
||||
{
|
||||
}
|
||||
|
||||
template<class... A> void emplace( mp11::mp_size_t<0>, A&&... a ) { ::new( &t0_ ) T0( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<1>, A&&... a ) { ::new( &t1_ ) T1( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<2>, A&&... a ) { ::new( &t2_ ) T2( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<3>, A&&... a ) { ::new( &t3_ ) T3( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<4>, A&&... a ) { ::new( &t4_ ) T4( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<5>, A&&... a ) { ::new( &t5_ ) T5( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<6>, A&&... a ) { ::new( &t6_ ) T6( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<7>, A&&... a ) { ::new( &t7_ ) T7( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<8>, A&&... a ) { ::new( &t8_ ) T8( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace( mp11::mp_size_t<9>, A&&... a ) { ::new( &t9_ ) T9( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<0>, A&&... a ) { ::new( &t0_ ) T0( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<1>, A&&... a ) { ::new( &t1_ ) T1( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<2>, A&&... a ) { ::new( &t2_ ) T2( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<3>, A&&... a ) { ::new( &t3_ ) T3( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<4>, A&&... a ) { ::new( &t4_ ) T4( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<5>, A&&... a ) { ::new( &t5_ ) T5( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<6>, A&&... a ) { ::new( &t6_ ) T6( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<7>, A&&... a ) { ::new( &t7_ ) T7( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<8>, A&&... a ) { ::new( &t8_ ) T8( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<9>, A&&... a ) { ::new( &t9_ ) T9( std::forward<A>(a)... ); }
|
||||
|
||||
template<std::size_t I, class... A> void emplace( mp11::mp_size_t<I>, A&&... a )
|
||||
template<std::size_t I, class... A> BOOST_CXX14_CONSTEXPR void emplace( mp11::mp_size_t<I>, A&&... a )
|
||||
{
|
||||
rest_.emplace( mp11::mp_size_t<I-10>(), std::forward<A>(a)... );
|
||||
}
|
||||
@@ -674,7 +683,7 @@ template<class T1, class... T> union variant_storage_impl<mp11::mp_true, T1, T..
|
||||
{
|
||||
}
|
||||
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<0>, A&&... a )
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<0>, A&&... a )
|
||||
{
|
||||
::new( &first_ ) T1( std::forward<A>(a)... );
|
||||
}
|
||||
@@ -742,16 +751,16 @@ template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, c
|
||||
|
||||
template<std::size_t I, class... A> constexpr variant_storage_impl( mp11::mp_size_t<I>, A&&... a ): rest_( mp11::mp_size_t<I-10>(), std::forward<A>(a)... ) {}
|
||||
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<0>, A&&... a ) { ::new( &t0_ ) T0( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<1>, A&&... a ) { ::new( &t1_ ) T1( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<2>, A&&... a ) { ::new( &t2_ ) T2( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<3>, A&&... a ) { ::new( &t3_ ) T3( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<4>, A&&... a ) { ::new( &t4_ ) T4( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<5>, A&&... a ) { ::new( &t5_ ) T5( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<6>, A&&... a ) { ::new( &t6_ ) T6( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<7>, A&&... a ) { ::new( &t7_ ) T7( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<8>, A&&... a ) { ::new( &t8_ ) T8( std::forward<A>(a)... ); }
|
||||
template<class... A> void emplace_impl( mp11::mp_false, mp11::mp_size_t<9>, A&&... a ) { ::new( &t9_ ) T9( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<0>, A&&... a ) { ::new( &t0_ ) T0( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<1>, A&&... a ) { ::new( &t1_ ) T1( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<2>, A&&... a ) { ::new( &t2_ ) T2( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<3>, A&&... a ) { ::new( &t3_ ) T3( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<4>, A&&... a ) { ::new( &t4_ ) T4( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<5>, A&&... a ) { ::new( &t5_ ) T5( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<6>, A&&... a ) { ::new( &t6_ ) T6( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<7>, A&&... a ) { ::new( &t7_ ) T7( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<8>, A&&... a ) { ::new( &t8_ ) T8( std::forward<A>(a)... ); }
|
||||
template<class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<9>, A&&... a ) { ::new( &t9_ ) T9( std::forward<A>(a)... ); }
|
||||
|
||||
template<std::size_t I, class... A> BOOST_CXX14_CONSTEXPR void emplace_impl( mp11::mp_false, mp11::mp_size_t<I>, A&&... a )
|
||||
{
|
||||
@@ -890,7 +899,7 @@ template<class... T> struct variant_base_impl<true, true, T...>
|
||||
}
|
||||
|
||||
// requires: ix_ == 0
|
||||
template<class I, class... A> void _replace( I, A&&... a )
|
||||
template<class I, class... A> BOOST_CXX14_CONSTEXPR void _replace( I, A&&... a )
|
||||
{
|
||||
::new( &st_ ) variant_storage<none, T...>( mp11::mp_size_t<I::value + 1>(), std::forward<A>(a)... );
|
||||
|
||||
@@ -974,7 +983,7 @@ template<class... T> struct variant_base_impl<true, false, T...>
|
||||
}
|
||||
|
||||
// requires: ix_ == 0
|
||||
template<class I, class... A> void _replace( I, A&&... a )
|
||||
template<class I, class... A> BOOST_CXX14_CONSTEXPR void _replace( I, A&&... a )
|
||||
{
|
||||
::new( &st_[ 0 ] ) variant_storage<none, T...>( mp11::mp_size_t<I::value + 1>(), std::forward<A>(a)... );
|
||||
|
||||
@@ -1042,7 +1051,7 @@ template<class... T> struct variant_base_impl<false, true, T...>
|
||||
}
|
||||
|
||||
// requires: ix_ == 0
|
||||
template<class I, class... A> void _replace( I, A&&... a )
|
||||
template<class I, class... A> BOOST_CXX14_CONSTEXPR void _replace( I, A&&... a )
|
||||
{
|
||||
::new( &st_ ) variant_storage<none, T...>( mp11::mp_size_t<I::value + 1>(), std::forward<A>(a)... );
|
||||
|
||||
@@ -1059,14 +1068,14 @@ template<class... T> struct variant_base_impl<false, true, T...>
|
||||
{
|
||||
variant_base_impl * this_;
|
||||
|
||||
template<class I> void operator()( I ) const noexcept
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I ) const noexcept
|
||||
{
|
||||
using U = mp11::mp_at<mp11::mp_list<none, T...>, I>;
|
||||
this_->st_.get( I() ).~U();
|
||||
}
|
||||
};
|
||||
|
||||
void _destroy() noexcept
|
||||
BOOST_CXX14_CONSTEXPR void _destroy() noexcept
|
||||
{
|
||||
if( ix_ > 0 )
|
||||
{
|
||||
@@ -1074,7 +1083,7 @@ template<class... T> struct variant_base_impl<false, true, T...>
|
||||
}
|
||||
}
|
||||
|
||||
~variant_base_impl() noexcept
|
||||
BOOST_VARIANT2_CXX20_CONSTEXPR ~variant_base_impl() noexcept
|
||||
{
|
||||
_destroy();
|
||||
}
|
||||
@@ -1102,7 +1111,7 @@ template<class... T> struct variant_base_impl<false, true, T...>
|
||||
return st_.get( mp11::mp_size_t<I+1>() );
|
||||
}
|
||||
|
||||
template<std::size_t I, class... A> void emplace( A&&... a )
|
||||
template<std::size_t I, class... A> BOOST_CXX14_CONSTEXPR void emplace( A&&... a )
|
||||
{
|
||||
std::size_t const J = I+1;
|
||||
|
||||
@@ -1182,7 +1191,7 @@ template<class... T> struct variant_base_impl<false, false, T...>
|
||||
#endif
|
||||
|
||||
// requires: ix_ == 0
|
||||
template<class I, class... A> void _replace( I, A&&... a )
|
||||
template<class I, class... A> BOOST_CXX14_CONSTEXPR void _replace( I, A&&... a )
|
||||
{
|
||||
::new( &storage( 0 ) ) variant_storage<none, T...>( mp11::mp_size_t<I::value + 1>(), std::forward<A>(a)... );
|
||||
|
||||
@@ -1200,19 +1209,19 @@ template<class... T> struct variant_base_impl<false, false, T...>
|
||||
variant_base_impl * this_;
|
||||
unsigned i2_;
|
||||
|
||||
template<class I> void operator()( I ) const noexcept
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I ) const noexcept
|
||||
{
|
||||
using U = mp11::mp_at<mp11::mp_list<none, T...>, I>;
|
||||
this_->storage( i2_ ).get( I() ).~U();
|
||||
}
|
||||
};
|
||||
|
||||
void _destroy() noexcept
|
||||
BOOST_CXX14_CONSTEXPR void _destroy() noexcept
|
||||
{
|
||||
mp11::mp_with_index<1 + sizeof...(T)>( ix_ / 2, _destroy_L1{ this, static_cast<unsigned>( ix_ & 1 ) } );
|
||||
}
|
||||
|
||||
~variant_base_impl() noexcept
|
||||
BOOST_VARIANT2_CXX20_CONSTEXPR ~variant_base_impl() noexcept
|
||||
{
|
||||
_destroy();
|
||||
}
|
||||
@@ -1242,7 +1251,7 @@ template<class... T> struct variant_base_impl<false, false, T...>
|
||||
return storage( ix_ & 1 ).get( mp11::mp_size_t<I+1>() );
|
||||
}
|
||||
|
||||
template<std::size_t I, class... A> void emplace( A&&... a )
|
||||
template<std::size_t I, class... A> BOOST_CXX14_CONSTEXPR void emplace( A&&... a )
|
||||
{
|
||||
std::size_t const J = I+1;
|
||||
|
||||
@@ -1403,7 +1412,7 @@ private:
|
||||
variant_base * this_;
|
||||
variant_base const & r;
|
||||
|
||||
template<class I> void operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I i ) const
|
||||
{
|
||||
this_->_replace( i, r._get_impl( i ) );
|
||||
}
|
||||
@@ -1411,7 +1420,7 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
variant_cc_base_impl( variant_cc_base_impl const& r )
|
||||
BOOST_CXX14_CONSTEXPR variant_cc_base_impl( variant_cc_base_impl const& r )
|
||||
noexcept( mp11::mp_all<std::is_nothrow_copy_constructible<T>...>::value )
|
||||
: variant_base()
|
||||
{
|
||||
@@ -1483,7 +1492,7 @@ private:
|
||||
variant_base * this_;
|
||||
variant_base const & r;
|
||||
|
||||
template<class I> void operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I i ) const
|
||||
{
|
||||
this_->template emplace<I::value>( r._get_impl( i ) );
|
||||
}
|
||||
@@ -1557,7 +1566,7 @@ private:
|
||||
variant_base * this_;
|
||||
variant_base & r;
|
||||
|
||||
template<class I> void operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I i ) const
|
||||
{
|
||||
this_->_replace( i, std::move( r._get_impl( i ) ) );
|
||||
}
|
||||
@@ -1565,7 +1574,7 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
variant_mc_base_impl( variant_mc_base_impl && r )
|
||||
BOOST_CXX14_CONSTEXPR variant_mc_base_impl( variant_mc_base_impl && r )
|
||||
noexcept( mp11::mp_all<std::is_nothrow_move_constructible<T>...>::value )
|
||||
{
|
||||
mp11::mp_with_index<sizeof...(T)>( r.index(), L2{ this, r } );
|
||||
@@ -1636,7 +1645,7 @@ private:
|
||||
variant_base * this_;
|
||||
variant_base & r;
|
||||
|
||||
template<class I> void operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I i ) const
|
||||
{
|
||||
this_->template emplace<I::value>( std::move( r._get_impl( i ) ) );
|
||||
}
|
||||
@@ -1644,7 +1653,7 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
variant_ma_base_impl& operator=( variant_ma_base_impl && r )
|
||||
BOOST_CXX14_CONSTEXPR variant_ma_base_impl& operator=( variant_ma_base_impl && r )
|
||||
noexcept( mp11::mp_all<std::is_nothrow_move_constructible<T>...>::value )
|
||||
{
|
||||
mp11::mp_with_index<sizeof...(T)>( r.index(), L4{ this, r } );
|
||||
@@ -1790,7 +1799,7 @@ private:
|
||||
variant * this_;
|
||||
variant & r;
|
||||
|
||||
template<class I> void operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I i ) const
|
||||
{
|
||||
using std::swap;
|
||||
swap( this_->_get_impl( i ), r._get_impl( i ) );
|
||||
@@ -1799,7 +1808,7 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
void swap( variant& r ) noexcept( mp11::mp_all<std::is_nothrow_move_constructible<T>..., detail::is_nothrow_swappable<T>...>::value )
|
||||
BOOST_CXX14_CONSTEXPR void swap( variant& r ) noexcept( mp11::mp_all<std::is_nothrow_move_constructible<T>..., detail::is_nothrow_swappable<T>...>::value )
|
||||
{
|
||||
if( index() == r.index() )
|
||||
{
|
||||
@@ -1826,7 +1835,7 @@ private:
|
||||
variant_base * this_;
|
||||
variant<U...> const & r;
|
||||
|
||||
template<class I> void operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I i ) const
|
||||
{
|
||||
using J = mp11::mp_find<mp11::mp_list<T...>, mp11::mp_at<mp11::mp_list<U...>, I>>;
|
||||
this_->_replace( J{}, r._get_impl( i ) );
|
||||
@@ -1837,7 +1846,7 @@ public:
|
||||
|
||||
template<class... U,
|
||||
class E2 = mp11::mp_if<mp11::mp_all<std::is_copy_constructible<U>..., mp11::mp_contains<mp11::mp_list<T...>, U>...>, void> >
|
||||
variant( variant<U...> const& r )
|
||||
BOOST_CXX14_CONSTEXPR variant( variant<U...> const& r )
|
||||
noexcept( mp11::mp_all<std::is_nothrow_copy_constructible<U>...>::value )
|
||||
{
|
||||
mp11::mp_with_index<sizeof...(U)>( r.index(), L6<U...>{ this, r } );
|
||||
@@ -1850,7 +1859,7 @@ private:
|
||||
variant_base * this_;
|
||||
variant<U...> & r;
|
||||
|
||||
template<class I> void operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR void operator()( I i ) const
|
||||
{
|
||||
using J = mp11::mp_find<mp11::mp_list<T...>, mp11::mp_at<mp11::mp_list<U...>, I>>;
|
||||
this_->_replace( J{}, std::move( r._get_impl( i ) ) );
|
||||
@@ -1861,7 +1870,7 @@ public:
|
||||
|
||||
template<class... U,
|
||||
class E2 = mp11::mp_if<mp11::mp_all<std::is_move_constructible<U>..., mp11::mp_contains<mp11::mp_list<T...>, U>...>, void> >
|
||||
variant( variant<U...> && r )
|
||||
BOOST_CXX14_CONSTEXPR variant( variant<U...> && r )
|
||||
noexcept( mp11::mp_all<std::is_nothrow_move_constructible<U>...>::value )
|
||||
{
|
||||
mp11::mp_with_index<sizeof...(U)>( r.index(), L7<U...>{ this, r } );
|
||||
@@ -1887,7 +1896,7 @@ private:
|
||||
{
|
||||
variant * this_;
|
||||
|
||||
template<class I> variant<U...> operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR variant<U...> operator()( I i ) const
|
||||
{
|
||||
using J = mp11::mp_find<mp11::mp_list<U...>, mp11::mp_at<mp11::mp_list<T...>, I>>;
|
||||
return this_->_subset_impl<U...>( J{}, this_->_get_impl( i ) );
|
||||
@@ -1909,7 +1918,7 @@ private:
|
||||
{
|
||||
variant const * this_;
|
||||
|
||||
template<class I> variant<U...> operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR variant<U...> operator()( I i ) const
|
||||
{
|
||||
using J = mp11::mp_find<mp11::mp_list<U...>, mp11::mp_at<mp11::mp_list<T...>, I>>;
|
||||
return this_->_subset_impl<U...>( J{}, this_->_get_impl( i ) );
|
||||
@@ -1931,7 +1940,7 @@ private:
|
||||
{
|
||||
variant * this_;
|
||||
|
||||
template<class I> variant<U...> operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR variant<U...> operator()( I i ) const
|
||||
{
|
||||
using J = mp11::mp_find<mp11::mp_list<U...>, mp11::mp_at<mp11::mp_list<T...>, I>>;
|
||||
return this_->_subset_impl<U...>( J{}, std::move( this_->_get_impl( i ) ) );
|
||||
@@ -1957,7 +1966,7 @@ private:
|
||||
{
|
||||
variant const * this_;
|
||||
|
||||
template<class I> variant<U...> operator()( I i ) const
|
||||
template<class I> BOOST_CXX14_CONSTEXPR variant<U...> operator()( I i ) const
|
||||
{
|
||||
using J = mp11::mp_find<mp11::mp_list<U...>, mp11::mp_at<mp11::mp_list<T...>, I>>;
|
||||
return this_->_subset_impl<U...>( J{}, std::move( this_->_get_impl( i ) ) );
|
||||
@@ -2293,7 +2302,7 @@ template<class R = detail::deduced, class F, class V1, class V2, class... V> con
|
||||
// specialized algorithms
|
||||
template<class... T,
|
||||
class E = typename std::enable_if<mp11::mp_all<std::is_move_constructible<T>..., detail::is_swappable<T>...>::value>::type>
|
||||
void swap( variant<T...> & v, variant<T...> & w )
|
||||
BOOST_CXX14_CONSTEXPR void swap( variant<T...> & v, variant<T...> & w )
|
||||
noexcept( noexcept(v.swap(w)) )
|
||||
{
|
||||
v.swap( w );
|
||||
|
||||
Reference in New Issue
Block a user