UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
References.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2// Templates for handling different types of references
3
4#pragma once
5
7
8namespace uLang
9{
10
11//------------------------------------------------------------------
12// From RemoveReference.h
13
17template <typename T> struct TRemoveReference { using Type = T; };
18template <typename T> struct TRemoveReference<T& > { using Type = T; };
19template <typename T> struct TRemoveReference<T&&> { using Type = T; };
20
21//------------------------------------------------------------------
22// From Decay.h
23
24namespace Private
25{
26 template <typename T>
28 {
29 using Type = typename TRemoveCV<T>::Type;
30 };
31
32 template <typename T>
34 {
35 using Type = T*;
36 };
37
38 template <typename T, uint32_t N>
39 struct TDecayNonReference<T[N]>
40 {
41 using Type = T*;
42 };
43
44 template <typename RetType, typename... Params>
45 struct TDecayNonReference<RetType(Params...)>
46 {
47 using Type = RetType (*)(Params...);
48 };
49}
50
57template <typename T>
62
63template <typename T>
64using TDecayT = typename TDecay<T>::Type;
65
66//------------------------------------------------------------------
67// From UnrealTemplate.h
68
77template <typename T> struct TRemovePointer { typedef T Type; };
78template <typename T> struct TRemovePointer<T*> { typedef T Type; };
79
85template <typename T>
87{
88 using CastType = typename TRemoveReference<T>::Type;
89
90 // Validate that we're not being passed an rvalue or a const object - the former is redundant, the latter is almost certainly a mistake
91 static_assert(TIsLValueReferenceType<T>::Value, "Move called on an rvalue");
92 static_assert(!TAreTypesEqual<CastType&, const CastType&>::Value, "Move called on a const object");
93
94 return (CastType&&)Obj;
95}
96
103template <typename T>
105{
106 using CastType = typename TRemoveReference<T>::Type;
107 return (CastType&&)Obj;
108}
109
114template <typename T>
116{
117 return (T&&)Obj;
118}
119
120template <typename T>
122{
123 return (T&&)Obj;
124}
125
126}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ULANG_FORCEINLINE
Definition Common.h:188
Definition OverriddenPropertySet.cpp:45
Definition VVMEngineEnvironment.h:23
ULANG_FORCEINLINE TRemoveReference< T >::Type && MoveIfPossible(T &&Obj)
Definition References.h:104
typename TDecay< T >::Type TDecayT
Definition References.h:64
ULANG_FORCEINLINE T && ForwardArg(typename TRemoveReference< T >::Type &Obj)
Definition References.h:115
ULANG_FORCEINLINE TRemoveReference< T >::Type && Move(T &&Obj)
Definition References.h:86
RetType(*)(Params...) Type
Definition References.h:47
T * Type
Definition References.h:41
T * Type
Definition References.h:35
Definition References.h:28
typename TRemoveCV< T >::Type Type
Definition References.h:29
Definition TypeTraits.h:36
Definition References.h:59
typename Private::TDecayNonReference< typename TRemoveReference< T >::Type >::Type Type
Definition References.h:60
Definition TypeTraits.h:311
T Type
Definition TypeTraits.h:22
T Type
Definition References.h:78
Definition References.h:77
T Type
Definition References.h:77
T Type
Definition References.h:18
T Type
Definition References.h:19
Definition References.h:17
T Type
Definition References.h:17