Avoid specializing templates within an outer class

This commit is contained in:
Liam Mitchell
2021-10-20 16:19:51 -07:00
parent 20ca24356a
commit 7c299378e9

View File

@@ -1282,36 +1282,36 @@ namespace eastl
};
template <typename R>
struct visitor_r
{
template <typename Visitor, typename Variant, size_t I>
static EA_CONSTEXPR R invoke_visitor_r(Visitor&& visitor, Variant&& variant)
{
return eastl::invoke(eastl::forward<Visitor>(visitor),
eastl::get<I>(eastl::forward<Variant>(variant)));
}
};
// void return type must discard the return values of the visitor even if the visitor returns a value.
template <>
struct visitor_r<void>
{
template <typename Visitor, typename Variant, size_t I>
static EA_CONSTEXPR void invoke_visitor_r(Visitor&& visitor, Variant&& variant)
{
eastl::invoke(eastl::forward<Visitor>(visitor),
eastl::get<I>(eastl::forward<Variant>(variant)));
}
};
template<> struct visitor_r<const void> : public visitor_r<void> {};
template<> struct visitor_r<volatile void> : public visitor_r<void> {};
template<> struct visitor_r<const volatile void> : public visitor_r<void> {};
// abstracts calling visit on a single variant with return types convertible to R
struct visitor_caller_one_r
{
template <typename R>
struct visitor_r
{
template <typename Visitor, typename Variant, size_t I>
static EA_CONSTEXPR R invoke_visitor_r(Visitor&& visitor, Variant&& variant)
{
return eastl::invoke(eastl::forward<Visitor>(visitor),
eastl::get<I>(eastl::forward<Variant>(variant)));
}
};
// void return type must discard the return values of the visitor even if the visitor returns a value.
template <>
struct visitor_r<void>
{
template <typename Visitor, typename Variant, size_t I>
static EA_CONSTEXPR void invoke_visitor_r(Visitor&& visitor, Variant&& variant)
{
eastl::invoke(eastl::forward<Visitor>(visitor),
eastl::get<I>(eastl::forward<Variant>(variant)));
}
};
template<> struct visitor_r<const void> : public visitor_r<void> {};
template<> struct visitor_r<volatile void> : public visitor_r<void> {};
template<> struct visitor_r<const volatile void> : public visitor_r<void> {};
template <typename R, typename Visitor, typename Variant, size_t... VariantArgIndices>
static EA_CPP14_CONSTEXPR decltype(auto) call_index_r(Visitor&& visitor, Variant&& variant, eastl::index_sequence<VariantArgIndices...>)
{