diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index 55f3559..debd0bf 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -365,37 +365,44 @@ template constexpr variant_alternative_t constexpr variant_alternative_t>& unsafe_get(variant& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); + + BOOST_ASSERT( v.index() == I ); + return v._get_impl( mp11::mp_size_t() ); } template constexpr variant_alternative_t>&& unsafe_get(variant&& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); + + BOOST_ASSERT( v.index() == I ); + return std::move( v._get_impl( mp11::mp_size_t() ) ); } template constexpr variant_alternative_t> const& unsafe_get(variant const& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); + + BOOST_ASSERT( v.index() == I ); + return v._get_impl( mp11::mp_size_t() ); } template constexpr variant_alternative_t> const&& unsafe_get(variant const&& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); + + BOOST_ASSERT( v.index() == I ); + return std::move( v._get_impl( mp11::mp_size_t() ) ); } -} // namespace detail - // get (type) template constexpr U& get(variant& v) @@ -2174,7 +2181,7 @@ template con { return mp11::mp_with_index>( v1.index(), [&]( auto I ){ - auto f2 = [&]( auto&&... a ){ return std::forward(f)( detail::unsafe_get( std::forward(v1) ), std::forward(a)... ); }; + auto f2 = [&]( auto&&... a ){ return std::forward(f)( unsafe_get( std::forward(v1) ), std::forward(a)... ); }; return visit( f2, std::forward(v2), std::forward(v)... ); });