mirror of
https://github.com/electronicarts/EASTL.git
synced 2026-01-18 17:21:19 +01:00
Avoid specializing templates within an outer class
This commit is contained in:
@@ -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...>)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user