diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index 23ce723..8cb7ad8 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -137,10 +137,34 @@ template struct variant_alternative_impl struct variant_alternative_impl const&, true>: std::add_lvalue_reference< mp11::mp_at_c, I> const > +{ +}; + +template struct variant_alternative_impl volatile&, true>: std::add_lvalue_reference< mp11::mp_at_c, I> volatile > +{ +}; + +template struct variant_alternative_impl const volatile&, true>: std::add_lvalue_reference< mp11::mp_at_c, I> const volatile > +{ +}; + template struct variant_alternative_impl&&, true>: std::add_rvalue_reference< mp11::mp_at_c, I> > { }; +template struct variant_alternative_impl const&&, true>: std::add_rvalue_reference< mp11::mp_at_c, I> const > +{ +}; + +template struct variant_alternative_impl volatile&&, true>: std::add_rvalue_reference< mp11::mp_at_c, I> volatile > +{ +}; + +template struct variant_alternative_impl const volatile&&, true>: std::add_rvalue_reference< mp11::mp_at_c, I> const volatile > +{ +}; + } // namespace detail template struct variant_alternative @@ -167,10 +191,34 @@ template struct variant_alternative& { }; +template struct variant_alternative const&>: public detail::variant_alternative_impl const&, (I < sizeof...(T))> +{ +}; + +template struct variant_alternative volatile&>: public detail::variant_alternative_impl volatile&, (I < sizeof...(T))> +{ +}; + +template struct variant_alternative const volatile&>: public detail::variant_alternative_impl const volatile&, (I < sizeof...(T))> +{ +}; + template struct variant_alternative&&>: public detail::variant_alternative_impl&&, (I < sizeof...(T))> { }; +template struct variant_alternative const&&>: public detail::variant_alternative_impl const&&, (I < sizeof...(T))> +{ +}; + +template struct variant_alternative volatile&&>: public detail::variant_alternative_impl volatile&&, (I < sizeof...(T))> +{ +}; + +template struct variant_alternative const volatile&&>: public detail::variant_alternative_impl const volatile&&, (I < sizeof...(T))> +{ +}; + #else namespace detail