diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index ee457c9..c9c0d48 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -311,12 +311,12 @@ template union variant_storage_impl { } - template void emplace( mp_size_t<0>, A&&... a ) noexcept + template void emplace( mp_size_t<0>, A&&... a ) { ::new( &first_ ) T1( std::forward(a)... ); } - template void emplace( mp_size_t, A&&... a ) noexcept + template void emplace( mp_size_t, A&&... a ) { rest_.emplace( mp_size_t(), std::forward(a)... ); } @@ -342,26 +342,26 @@ template union variant_storage_impl { } - template void emplace_impl( mp_false, A&&... a ) noexcept + template void emplace_impl( mp_false, mp_size_t<0>, A&&... a ) { ::new( &first_ ) T1( std::forward(a)... ); } - template constexpr void emplace_impl( mp_true, A&&... a ) noexcept - { - *this = variant_storage_impl( mp_size_t<0>(), std::forward(a)... ); - } - - template constexpr void emplace( mp_size_t<0>, A&&... a ) noexcept - { - this->emplace_impl( mp_all, std::is_trivially_move_assignable...>(), std::forward(a)... ); - } - - template constexpr void emplace( mp_size_t, A&&... a ) noexcept + template constexpr void emplace_impl( mp_false, mp_size_t, A&&... a ) { rest_.emplace( mp_size_t(), std::forward(a)... ); } + template constexpr void emplace_impl( mp_true, mp_size_t, A&&... a ) noexcept + { + *this = variant_storage_impl( mp_size_t(), std::forward(a)... ); + } + + template constexpr void emplace( mp_size_t, A&&... a ) + { + this->emplace_impl( mp_all, std::is_trivially_move_assignable...>(), mp_size_t(), std::forward(a)... ); + } + constexpr T1& get( mp_size_t<0> ) noexcept { return first_; } constexpr T1 const& get( mp_size_t<0> ) const noexcept { return first_; }