9#include "Templates/Invoke.h"
35#if (defined(_MSC_VER) && !defined(__clang__)) && USING_CODE_ANALYSIS
36 #define UE_TUPLE_STATIC_ANALYSIS_WORKAROUND 0
38 #define UE_TUPLE_STATIC_ANALYSIS_WORKAROUND 0
43#if defined(_MSC_VER) && !defined(__clang__)
44 #define UE_TUPLE_REFERENCE_WORKAROUND 1
46 #define UE_TUPLE_REFERENCE_WORKAROUND 0
51template <
typename... Types>
54template <
typename KeyType,
typename ValueType>
57template <
typename... Types>
65 template <
typename T,
typename... Types>
68 template <
typename T,
typename U,
typename... Types>
71 template <
typename T, u
int32 Index, u
int32 TupleSize>
74 template <
typename ArgType>
96 template <
typename ArgType>
115 template <u
int32 Index, u
int32 TupleSize>
118 template <
typename DeducedType,
typename TupleType>
121#if UE_TUPLE_REFERENCE_WORKAROUND
122 if constexpr (!std::is_reference_v<TupleType> && std::is_reference_v<DeducedType>)
133 return static_cast<std::conditional_t<!std::is_reference_v<TupleType> && std::is_rvalue_reference_v<DeducedType>,
DeducedType,
decltype(Result)
>>(Result);
137 template <
typename TupleType>
144#if UE_TUPLE_STATIC_ANALYSIS_WORKAROUND
146 struct TTupleElementGetterByIndex<0, 2>
148 template <
typename TupleType>
155 return static_cast<std::conditional_t<!std::is_reference_v<TupleType> && std::is_rvalue_reference_v<
decltype(Tuple.Key)
>,
decltype(Tuple.Key),
decltype(Result)>>(Result);
159 struct TTupleElementGetterByIndex<1, 2>
161 template <
typename TupleType>
168 return static_cast<std::conditional_t<!std::is_reference_v<TupleType> && std::is_rvalue_reference_v<
decltype(Tuple.
Value)
>,
decltype(Tuple.Value),
decltype(Result)>>(Result);
175 template <
typename TupleType>
178#if UE_TUPLE_REFERENCE_WORKAROUND
179 using KeyType =
decltype(std::decay_t<TupleType>::Key);
180 if constexpr (!std::is_reference_v<TupleType> && std::is_reference_v<KeyType>)
182 return (KeyType)
Get(Tuple);
191 return static_cast<std::conditional_t<!std::is_reference_v<TupleType> && std::is_rvalue_reference_v<
decltype(Tuple.Key)
>,
decltype(Tuple.Key),
decltype(Result)>>(Result);
197 template <
typename Type, u
int32 TupleSize>
200 template <u
int32 DeducedIndex,
typename TupleType>
206 template <
typename TupleType>
213#if UE_TUPLE_STATIC_ANALYSIS_WORKAROUND
214 template <
typename Type>
215 struct TTupleElementGetterByType<Type, 2>
217 template <
typename TupleType>
220 if constexpr (std::is_same_v<Type,
decltype(Tuple.Key)>)
226 static_assert(std::is_same_v<Type,
decltype(Tuple.Value)>,
"This has to be true - check the call site");
233 template <u
int32 ArgCount, u
int32 ArgToCompare>
236 template <
typename TupleType>
243 template <u
int32 ArgCount>
246 template <
typename TupleType>
253 template <u
int32 NumArgs, u
int32 ArgToCompare = 0,
bool Last = ArgToCompare + 1 == NumArgs>
256 template <
typename TupleType>
263 template <u
int32 NumArgs, u
int32 ArgToCompare>
266 template <
typename TupleType>
273 template <u
int32 NumArgs>
276 template <
typename TupleType>
283 template <
typename Indices,
typename... Types>
286 template <
uint32... Indices,
typename... Types>
295 template <
typename TupleType>
346 int Temp[] = { 0, (Ar << Tuple.template
Get<Indices>(), 0)... };
366 return !(*
this == Rhs);
376 return !(Rhs < *
this);
386 return !(*
this < Rhs);
390#if UE_TUPLE_STATIC_ANALYSIS_WORKAROUND
391 template <
typename KeyType,
typename ValueType>
399 template <
typename KeyArgType,
typename ValueArgType>
406 template <
typename TupleType>
413 TTupleBase() =
default;
414 TTupleBase(TTupleBase&&
Other) =
default;
415 TTupleBase(
const TTupleBase&
Other) =
default;
416 TTupleBase& operator=(TTupleBase&&
Other) =
default;
417 TTupleBase& operator=(
const TTupleBase&
Other) =
default;
437 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args) & { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast< TTupleBase&
>(*this).template
Get<0>(),
static_cast< TTupleBase&
>(*this).template
Get<1>()); }
438 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args)
const & { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast<const TTupleBase&
>(*this).template
Get<0>(),
static_cast<const TTupleBase&
>(*this).template
Get<1>()); }
439 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args)
volatile& { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast< volatile TTupleBase&
>(*this).template
Get<0>(),
static_cast< volatile TTupleBase&
>(*this).template
Get<1>()); }
440 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args)
const volatile& { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast<const volatile TTupleBase&
>(*this).template
Get<0>(),
static_cast<const volatile TTupleBase&
>(*this).template
Get<1>()); }
441 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args) && { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast< TTupleBase&&
>(*this).template
Get<0>(),
static_cast< TTupleBase&&
>(*this).template
Get<1>()); }
442 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args)
const && { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast<const TTupleBase&&
>(*this).template
Get<0>(),
static_cast<const TTupleBase&&
>(*this).template
Get<1>()); }
443 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args)
volatile&& { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast< volatile TTupleBase&&
>(*this).template
Get<0>(),
static_cast< volatile TTupleBase&&
>(*this).template
Get<1>()); }
444 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyAfter(FuncType&& Func,
ArgTypes&&... Args)
const volatile&& { return ::Invoke(Func,
Forward<ArgTypes>(Args)...,
static_cast<const volatile TTupleBase&&
>(*this).template
Get<0>(),
static_cast<const volatile TTupleBase&&
>(*this).template
Get<1>()); }
446 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args) & { return ::Invoke(Func,
static_cast< TTupleBase&
>(*this).template
Get<0>(),
static_cast< TTupleBase&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
447 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args)
const & { return ::Invoke(Func,
static_cast<const TTupleBase&
>(*this).template
Get<0>(),
static_cast<const TTupleBase&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
448 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args)
volatile& { return ::Invoke(Func,
static_cast< volatile TTupleBase&
>(*this).template
Get<0>(),
static_cast< volatile TTupleBase&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
449 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args)
const volatile& { return ::Invoke(Func,
static_cast<const volatile TTupleBase&
>(*this).template
Get<0>(),
static_cast<const volatile TTupleBase&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
450 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args) && { return ::Invoke(Func,
static_cast< TTupleBase&&
>(*this).template
Get<0>(),
static_cast< TTupleBase&&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
451 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args)
const && { return ::Invoke(Func,
static_cast<const TTupleBase&&
>(*this).template
Get<0>(),
static_cast<const TTupleBase&&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
452 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args)
volatile&& { return ::Invoke(Func,
static_cast< volatile TTupleBase&&
>(*this).template
Get<0>(),
static_cast< volatile TTupleBase&&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
453 template <
typename FuncType,
typename...
ArgTypes>
decltype(
auto) ApplyBefore(FuncType&& Func,
ArgTypes&&... Args)
const volatile&& { return ::Invoke(Func,
static_cast<const volatile TTupleBase&&
>(*this).template
Get<0>(),
static_cast<const volatile TTupleBase&&
>(*this).template
Get<1>(),
Forward<ArgTypes>(Args)...); }
476 return !(Lhs ==
Rhs);
515 template <
typename IntegerSequence>
518 template <
uint32... Indices>
521 template <
typename TupleType,
typename FuncType>
528 template <
typename IntegerSequence>
531 template <
uint32... Indices>
542 template <
typename FuncType,
typename...
TupleTypes>
552 template <
typename TupleType>
555 template <
typename... Types>
561 template <
typename Type,
typename TupleType>
564 static_assert(
sizeof(
TupleType) == 0,
"TTupleIndex instantiated with a non-tuple type");
568 template <
typename Type,
typename...
TupleTypes>
575 template <u
int32 DeducedIndex>
583#if UE_TUPLE_STATIC_ANALYSIS_WORKAROUND
584 template <
typename Type,
typename KeyType,
typename ValueType>
590 static constexpr uint32 Value = std::is_same_v<Type, ValueType> ? 1 : 0;
594 template <u
int32 Index,
typename TupleType>
597 static_assert(
sizeof(
TupleType) == 0,
"TTupleElement instantiated with a non-tuple type");
604 static_assert(
Index <
sizeof...(TupleTypes),
"TTupleElement instantiated with an invalid index");
610 template <
typename DeducedType>
619#if UE_TUPLE_STATIC_ANALYSIS_WORKAROUND
620 template <u
int32 Index,
typename KeyType,
typename ValueType>
623 static_assert(
Index < 2,
"TTupleElement instantiated with an invalid index");
625 using Type = std::conditional_t<Index == 0, KeyType, ValueType>;
629 template <u
int32 ArgToCombine, u
int32 ArgCount>
632 template <
typename TupleType>
639 template <u
int32 ArgIndex>
642 template <
typename TupleType>
650template <
typename... Types>
657 template <UE::CNotCVRefTo<TTuple>... ArgTypes>
658 requires (std::is_constructible_v<Types, ArgTypes&&> && ...)
659 constexpr explicit(!std::conjunction_v<std::is_convertible<ArgTypes&&, Types>...>)
TTuple(
ArgTypes&&... Args)
665 requires (std::is_constructible_v<Types, OtherTypes&&> && ...)
672 requires (std::is_constructible_v<Types, const OtherTypes&> && ...)
678 constexpr TTuple()
requires (std::is_default_constructible_v<Types> && ...) =
default;
685 requires (std::is_assignable_v<Types, const OtherTypes&> && ...)
693 requires (std::is_assignable_v<Types, OtherTypes&&> && ...)
701template <
typename... Types>
714 template<
typename KeyType,
typename ValueType>
721 template<
typename KeyType,
typename ValueType>
730 template<
typename KeyType,
typename ValueType>
736 template<
typename KeyType,
typename ValueType>
750template <
typename TupleType>
763template <
typename Type,
typename TupleType>
774template <u
int32 Index,
typename TupleType>
793template <
typename... Types>
796 return UE::Core::Private::Tuple::MakeTupleImpl<std::decay_t<Types>...>(
Forward<Types>(Args)...);
818template <
typename... Types>
846template <
typename FuncType,
typename... Types>
852template <
typename FuncType,
typename... Types>
898template <
typename... Types>
901 return TTuple<Types&...>(Args...);
909template <
typename... Types>
constexpr bool TIsTuple_V<
const volatile TTuple<Types...>> =
true;
922 : std::integral_constant<std::size_t, sizeof...(ArgTypes)>
925template <std::size_t N,
typename...
ArgTypes>
926#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 9000
938template <
int N,
typename TupleType>
948template <
typename... Types>
955template <
typename... Types>
961#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
AUTORTFM_INFER UE_FORCEINLINE_HINT constexpr auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(((FuncType &&) Func)((ArgTypes &&) Args...))
Definition Invoke.h:44
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
typename UE4IntegerSequence_Private::TMakeIntegerSequenceImpl< T, N >::Type TMakeIntegerSequence
Definition IntegerSequence.h:31
#define DECLARE_TEMPLATE_INTRINSIC_TYPE_LAYOUT(TemplatePrefix, T)
Definition MemoryLayout.h:661
constexpr TTuple< std::decay_t< Types >... > MakeTuple(Types &&... Args)
Definition Tuple.h:794
constexpr bool TIsTuple_V
Definition Tuple.h:904
FArchive & operator<<(FArchive &Ar, TTuple< Types... > &Tuple)
Definition Tuple.h:949
UE_FORCEINLINE_HINT decltype(auto) TransformTuple(TTuple< Types... > &&Tuple, FuncType Func)
Definition Tuple.h:847
decltype(auto) get(TupleType &&val)
Definition Tuple.h:940
UE_FORCEINLINE_HINT void VisitTupleElements(FuncType &&Func, FirstTupleType &&FirstTuple, TupleTypes &&... Tuples)
Definition Tuple.h:878
UE_FORCEINLINE_HINT TTuple< Types &&... > ForwardAsTuple(Types &&... Args)
Definition Tuple.h:819
UE_FORCEINLINE_HINT uint32 GetTypeHash(const TTuple< Types... > &Tuple)
Definition Tuple.h:702
UE_FORCEINLINE_HINT TTuple< Types &... > Tie(Types &... Args)
Definition Tuple.h:899
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
UE_FORCEINLINE_HINT uint32 GetTypeHashHelper(const T &V)
Definition TypeHash.h:215
UE_REWRITE constexpr bool operator>(const LhsType &Lhs, const RhsType &Rhs)
Definition UEOps.h:90
UE_REWRITE constexpr bool operator<=(const LhsType &Lhs, const RhsType &Rhs)
Definition UEOps.h:118
UE_REWRITE constexpr bool operator>=(const LhsType &Lhs, const RhsType &Rhs)
Definition UEOps.h:104
UE_INTRINSIC_CAST UE_REWRITE decltype(auto) ForwardAsBase(std::remove_reference_t< T > &Obj)
Definition UnrealTemplate.h:757
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Core.Build.cs:8
Definition Archive.h:1208
Definition MemoryImageWriter.h:14
CORE_API void WriteObject(const void *Object, const FTypeLayoutDesc &TypeDesc)
Definition MemoryImage.cpp:2099
Definition MemoryImageWriter.h:78
Definition SecureHash.h:314
Definition StructuredArchiveSlots.h:52
UE_API FStructuredArchiveStream EnterStream()
Definition StructuredArchiveSlots.h:263
Definition StructuredArchiveSlots.h:193
UE_API FStructuredArchiveSlot EnterElement()
Definition StructuredArchiveSlots.h:462
UE_NODEBUG void IntrinsicWriteMemoryImage(FMemoryImageWriter &Writer, const TArray< T, AllocatorType > &Object, const FTypeLayoutDesc &)
Definition Array.h:3957
CORE_API uint32 AppendHashPair(const FTypeLayoutDesc &KeyTypeDesc, const FTypeLayoutDesc &ValueTypeDesc, const FPlatformTypeLayoutParameters &LayoutParams, FSHA1 &Hasher)
Definition MemoryImage.cpp:869
UE_NODEBUG uint32 IntrinsicUnfrozenCopy(const FMemoryUnfreezeContent &Context, const TArray< T, AllocatorType > &Object, void *OutDst)
Definition Array.h:3963
UE_NODEBUG uint32 IntrinsicGetTargetAlignment(const TArray< T, AllocatorType > *DummyObject, const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams)
Definition Array.h:3976
CORE_API uint32 GetTargetAlignment(const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams)
Definition MemoryImage.cpp:408
UE_NODEBUG uint32 IntrinsicAppendHash(const TArray< T, AllocatorType > *DummyObject, const FTypeLayoutDesc &TypeDesc, const FPlatformTypeLayoutParameters &LayoutParams, FSHA1 &Hasher)
Definition Array.h:3970
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
Definition OverriddenPropertySet.cpp:45
void SerializeStructured(FStructuredArchive::FSlot Slot, TPagedArray< ElementType, PageSizeInBytes, AllocatorType > &InOutPagedArray)
Definition PagedArray.h:122
EForwardingConstructor
Definition Tuple.h:62
@ ForwardingConstructor
Definition Tuple.h:62
UE_FORCEINLINE_HINT constexpr TTuple< ElementTypes... > MakeTupleImpl(Types &&... Args)
Definition Tuple.h:510
EOtherTupleConstructor
Definition Tuple.h:63
@ OtherTupleConstructor
Definition Tuple.h:63
constexpr uint32 TTypeCountInParameterPack_V
Definition Tuple.h:66
bool operator==(const TPtrVariantBase< LhsType, bLhsStrength > &Lhs, const TPtrVariantBase< RhsType, bRhsStrength > &Rhs)
Definition PointerVariants.h:186
bool operator!=(const TPtrVariantBase< LhsType, bLhsStrength > &Lhs, const TPtrVariantBase< RhsType, bRhsStrength > &Rhs)
Definition PointerVariants.h:192
FORCEINLINE UE_STRING_CLASS RhsType && Rhs
Definition String.cpp.inl:718
Definition AdvancedWidgetsModule.cpp:13
bool operator<(const FPropertyTypeName &Lhs, const FPropertyTypeName &Rhs)
Definition PropertyTypeName.cpp:341
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition MemoryLayout.h:108
Definition IntegerSequence.h:9
@ Value
Definition Tuple.h:914
TTuple(const TTuple< OtherTypes... > &Other)
Definition Tuple.h:673
TTuple(const TTuple &)=default
TTuple & operator=(TTuple &&)=default
TTuple(TTuple &&)=default
TTuple & operator=(const TTuple< OtherTypes... > &Other)
Definition Tuple.h:686
TTuple & operator=(const TTuple &)=default
constexpr TTuple()=default
TTuple & operator=(TTuple< OtherTypes... > &&Other)
Definition Tuple.h:694
TTuple(TTuple< OtherTypes... > &&Other)
Definition Tuple.h:666
static UE_FORCEINLINE_HINT bool Compare(const TupleType &Lhs, const TupleType &Rhs)
Definition Tuple.h:247
static UE_FORCEINLINE_HINT bool Compare(const TupleType &Lhs, const TupleType &Rhs)
Definition Tuple.h:237
decltype(Resolve(DeclVal< TTuple< TupleTypes... > * >())) Type
Definition Tuple.h:615
void Type
Definition Tuple.h:598
static constexpr uint32 Value
Definition Tuple.h:565
static UE_FORCEINLINE_HINT uint32 Do(uint32 Hash, const TupleType &Tuple)
Definition Tuple.h:643
static UE_FORCEINLINE_HINT uint32 Do(uint32 Hash, const TupleType &Tuple)
Definition Tuple.h:633
static UE_FORCEINLINE_HINT bool Do(const TupleType &Lhs, const TupleType &Rhs)
Definition Tuple.h:267
static UE_FORCEINLINE_HINT bool Do(const TupleType &Lhs, const TupleType &Rhs)
Definition Tuple.h:277
static UE_FORCEINLINE_HINT bool Do(const TupleType &Lhs, const TupleType &Rhs)
Definition Tuple.h:257
TTupleBaseElement(TTupleBaseElement &&)=default
TTupleBaseElement(const TTupleBaseElement &)=default
TTupleBaseElement & operator=(const TTupleBaseElement &)=default
T Key
Definition Tuple.h:112
constexpr TTupleBaseElement()
Definition Tuple.h:102
TTupleBaseElement & operator=(TTupleBaseElement &&)=default
constexpr TTupleBaseElement(EForwardingConstructor, ArgType &&Arg)
Definition Tuple.h:97
TTupleBaseElement & operator=(TTupleBaseElement &&)=default
TTupleBaseElement(const TTupleBaseElement &)=default
constexpr TTupleBaseElement(EForwardingConstructor, ArgType &&Arg)
Definition Tuple.h:75
TTupleBaseElement & operator=(const TTupleBaseElement &)=default
T Value
Definition Tuple.h:90
TTupleBaseElement(TTupleBaseElement &&)=default
constexpr TTupleBaseElement()
Definition Tuple.h:80
UE_FORCEINLINE_HINT decltype(auto) Get() const &
Definition Tuple.h:308
UE_FORCEINLINE_HINT bool operator>=(const TTupleBase &Rhs) const
Definition Tuple.h:384
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) const &&
Definition Tuple.h:339
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) &&
Definition Tuple.h:329
UE_FORCEINLINE_HINT decltype(auto) Get() const volatile &&
Definition Tuple.h:314
constexpr TTupleBase(EForwardingConstructor, ArgTypes &&... Args)
Definition Tuple.h:290
static void SerializeStructured(FStructuredArchive::FSlot Slot, TTupleBase &Tuple)
Definition Tuple.h:350
UE_FORCEINLINE_HINT decltype(auto) Get() volatile &
Definition Tuple.h:309
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) const volatile &
Definition Tuple.h:328
UE_FORCEINLINE_HINT decltype(auto) Get() &
Definition Tuple.h:307
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) const &&
Definition Tuple.h:330
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) volatile &&
Definition Tuple.h:340
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) volatile &
Definition Tuple.h:336
static void Serialize(FArchive &Ar, TTupleBase &Tuple)
Definition Tuple.h:343
TTupleBase(EOtherTupleConstructor, TupleType &&Other)
Definition Tuple.h:296
UE_FORCEINLINE_HINT bool operator<(const TTupleBase &Rhs) const
Definition Tuple.h:369
UE_FORCEINLINE_HINT decltype(auto) Get() &&
Definition Tuple.h:311
UE_FORCEINLINE_HINT decltype(auto) Get() const &&
Definition Tuple.h:312
UE_FORCEINLINE_HINT decltype(auto) Get() const volatile &
Definition Tuple.h:310
UE_FORCEINLINE_HINT bool operator==(const TTupleBase &Rhs) const
Definition Tuple.h:358
UE_FORCEINLINE_HINT decltype(auto) Get() volatile &&
Definition Tuple.h:313
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) const &
Definition Tuple.h:326
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) const &
Definition Tuple.h:335
TTupleBase(const TTupleBase &Other)=default
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) volatile &
Definition Tuple.h:327
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) volatile &&
Definition Tuple.h:331
constexpr TTupleBase()=default
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) const volatile &
Definition Tuple.h:337
TTupleBase & operator=(TTupleBase &&Other)=default
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) &&
Definition Tuple.h:338
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) const volatile &&
Definition Tuple.h:332
decltype(auto) ApplyAfter(FuncType &&Func, ArgTypes &&... Args) &
Definition Tuple.h:325
UE_FORCEINLINE_HINT bool operator!=(const TTupleBase &Rhs) const
Definition Tuple.h:364
TTupleBase(TTupleBase &&Other)=default
UE_FORCEINLINE_HINT bool operator>(const TTupleBase &Rhs) const
Definition Tuple.h:379
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) const volatile &&
Definition Tuple.h:341
TTupleBase & operator=(const TTupleBase &Other)=default
decltype(auto) ApplyBefore(FuncType &&Func, ArgTypes &&... Args) &
Definition Tuple.h:334
UE_FORCEINLINE_HINT bool operator<=(const TTupleBase &Rhs) const
Definition Tuple.h:374
static decltype(auto) Get(TupleType &&Tuple)
Definition Tuple.h:176
static decltype(auto) GetImpl(const volatile TTupleBaseElement< DeducedType, Index, TupleSize > &Element, TupleType &&Tuple)
Definition Tuple.h:119
static UE_FORCEINLINE_HINT decltype(auto) Get(TupleType &&Tuple)
Definition Tuple.h:138
static UE_FORCEINLINE_HINT decltype(auto) Get(TupleType &&Tuple)
Definition Tuple.h:207
static UE_FORCEINLINE_HINT decltype(auto) GetImpl(const volatile TTupleBaseElement< Type, DeducedIndex, TupleSize > &, TupleType &&Tuple)
Definition Tuple.h:201
static void Do(FuncType &&Func, TupleTypes &&... Tuples)
Definition Tuple.h:543
static UE_FORCEINLINE_HINT void InvokeFunc(FuncType &&Func, TupleTypes &&... Tuples)
Definition Tuple.h:537
typename TTupleElement< N, TTuple< ArgTypes... > >::Type type
Definition Tuple.h:935