mirror of
https://github.com/boostorg/variant2.git
synced 2025-07-29 19:57:18 +02:00
Fix variant_alternative for g++ 4.8
This commit is contained in:
@ -137,10 +137,34 @@ template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T...> const&, true>: std::add_lvalue_reference< mp11::mp_at_c<variant<T...>, I> const >
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T...> volatile&, true>: std::add_lvalue_reference< mp11::mp_at_c<variant<T...>, I> volatile >
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T...> const volatile&, true>: std::add_lvalue_reference< mp11::mp_at_c<variant<T...>, I> const volatile >
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T...>&&, true>: std::add_rvalue_reference< mp11::mp_at_c<variant<T...>, I> >
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T...> const&&, true>: std::add_rvalue_reference< mp11::mp_at_c<variant<T...>, I> const >
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T...> volatile&&, true>: std::add_rvalue_reference< mp11::mp_at_c<variant<T...>, I> volatile >
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative_impl<I, variant<T...> const volatile&&, true>: std::add_rvalue_reference< mp11::mp_at_c<variant<T...>, I> const volatile >
|
||||
{
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
||||
template<std::size_t I, class T> struct variant_alternative
|
||||
@ -167,10 +191,34 @@ template<std::size_t I, class... T> struct variant_alternative<I, variant<T...>&
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative<I, variant<T...> const&>: public detail::variant_alternative_impl<I, variant<T...> const&, (I < sizeof...(T))>
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative<I, variant<T...> volatile&>: public detail::variant_alternative_impl<I, variant<T...> volatile&, (I < sizeof...(T))>
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative<I, variant<T...> const volatile&>: public detail::variant_alternative_impl<I, variant<T...> const volatile&, (I < sizeof...(T))>
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative<I, variant<T...>&&>: public detail::variant_alternative_impl<I, variant<T...>&&, (I < sizeof...(T))>
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative<I, variant<T...> const&&>: public detail::variant_alternative_impl<I, variant<T...> const&&, (I < sizeof...(T))>
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative<I, variant<T...> volatile&&>: public detail::variant_alternative_impl<I, variant<T...> volatile&&, (I < sizeof...(T))>
|
||||
{
|
||||
};
|
||||
|
||||
template<std::size_t I, class... T> struct variant_alternative<I, variant<T...> const volatile&&>: public detail::variant_alternative_impl<I, variant<T...> const volatile&&, (I < sizeof...(T))>
|
||||
{
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
namespace detail
|
||||
|
Reference in New Issue
Block a user