diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index d4d3d82..9f1f517 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -842,14 +842,14 @@ struct none {}; // trivially destructible, single buffered template struct variant_base_impl { - unsigned ix_; variant_storage st_; + unsigned ix_; - constexpr variant_base_impl(): ix_( 0 ), st_( mp11::mp_size_t<0>() ) + constexpr variant_base_impl(): st_( mp11::mp_size_t<0>() ), ix_( 0 ) { } - template constexpr explicit variant_base_impl( I, A&&... a ): ix_( I::value + 1 ), st_( mp11::mp_size_t(), std::forward(a)... ) + template constexpr explicit variant_base_impl( I, A&&... a ): st_( mp11::mp_size_t(), std::forward(a)... ), ix_( I::value + 1 ) { } @@ -913,14 +913,14 @@ template struct variant_base_impl // trivially destructible, double buffered template struct variant_base_impl { - unsigned ix_; variant_storage st_[ 2 ]; + unsigned ix_; - constexpr variant_base_impl(): ix_( 0 ), st_{ { mp11::mp_size_t<0>() }, { mp11::mp_size_t<0>() } } + constexpr variant_base_impl(): st_{ { mp11::mp_size_t<0>() }, { mp11::mp_size_t<0>() } }, ix_( 0 ) { } - template constexpr explicit variant_base_impl( I, A&&... a ): ix_( ( I::value + 1 ) * 2 ), st_{ { mp11::mp_size_t(), std::forward(a)... }, { mp11::mp_size_t<0>() } } + template constexpr explicit variant_base_impl( I, A&&... a ): st_{ { mp11::mp_size_t(), std::forward(a)... }, { mp11::mp_size_t<0>() } }, ix_( ( I::value + 1 ) * 2 ) { } @@ -971,14 +971,14 @@ template struct variant_base_impl // not trivially destructible, single buffered template struct variant_base_impl { - unsigned ix_; variant_storage st_; + unsigned ix_; - constexpr variant_base_impl(): ix_( 0 ), st_( mp11::mp_size_t<0>() ) + constexpr variant_base_impl(): st_( mp11::mp_size_t<0>() ), ix_( 0 ) { } - template constexpr explicit variant_base_impl( I, A&&... a ): ix_( I::value + 1 ), st_( mp11::mp_size_t(), std::forward(a)... ) + template constexpr explicit variant_base_impl( I, A&&... a ): st_( mp11::mp_size_t(), std::forward(a)... ), ix_( I::value + 1 ) { } @@ -1061,19 +1061,18 @@ template struct variant_base_impl // not trivially destructible, double buffered template struct variant_base_impl { - unsigned ix_; - #if defined(__GNUC__) && __GNUC__ < 11 && !defined(__clang__) && !defined(__INTEL_COMPILER) // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63707 :-( variant_storage st1_, st2_; + unsigned ix_; - constexpr variant_base_impl(): ix_( 0 ), st1_( mp11::mp_size_t<0>() ), st2_( mp11::mp_size_t<0>() ) + constexpr variant_base_impl(): st1_( mp11::mp_size_t<0>() ), st2_( mp11::mp_size_t<0>() ), ix_( 0 ) { } - template constexpr explicit variant_base_impl( I, A&&... a ): ix_( ( I::value + 1 ) * 2 ), st1_( mp11::mp_size_t(), std::forward(a)... ), st2_( mp11::mp_size_t<0>() ) + template constexpr explicit variant_base_impl( I, A&&... a ): st1_( mp11::mp_size_t(), std::forward(a)... ), st2_( mp11::mp_size_t<0>() ), ix_( ( I::value + 1 ) * 2 ) { } @@ -1090,12 +1089,13 @@ template struct variant_base_impl #else variant_storage st_[ 2 ]; + unsigned ix_; - constexpr variant_base_impl(): ix_( 0 ), st_{ { mp11::mp_size_t<0>() }, { mp11::mp_size_t<0>() } } + constexpr variant_base_impl(): st_{ { mp11::mp_size_t<0>() }, { mp11::mp_size_t<0>() } }, ix_( 0 ) { } - template constexpr explicit variant_base_impl( I, A&&... a ): ix_( ( I::value + 1 ) * 2 ), st_{ { mp11::mp_size_t(), std::forward(a)... }, { mp11::mp_size_t<0>() } } + template constexpr explicit variant_base_impl( I, A&&... a ): st_{ { mp11::mp_size_t(), std::forward(a)... }, { mp11::mp_size_t<0>() } }, ix_( ( I::value + 1 ) * 2 ) { }