26 template<
typename Derived>
29 if constexpr (Derived::bUsingIntrusiveUnsetState)
40#if !PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
45 template <
typename OptionalType,
bool bIsTriviallyDestructible = std::is_trivially_destructible_v<OptionalType>>
80 template <
typename OptionalType>
126template<
typename OptionalType>
133#if !PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
155#if PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
182 if constexpr (!bUsingIntrusiveUnsetState)
189 checkf(
IsSet(),
TEXT(
"TOptional::TOptional(EInPlace, ...) - optionals should not be unset by emplacement"));
201#if PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
214#if PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
233 if constexpr (!bUsingIntrusiveUnsetState)
247 if constexpr (!bUsingIntrusiveUnsetState)
311 if constexpr (bUsingIntrusiveUnsetState)
326 if constexpr (bUsingIntrusiveUnsetState)
362 if constexpr (!bUsingIntrusiveUnsetState)
369 checkf(
IsSet(),
TEXT(
"TOptional::Emplace(...) - optionals should not be unset by an emplacement"));
389 return Lhs.TypedValue == Rhs.TypedValue;
394 return !(Lhs == Rhs);
428#if PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
445 checkf(
IsSet(),
TEXT(
"It is an error to call GetValue() on an unset TOptional. Please either check IsSet() or use Get(DefaultValue) instead."));
459 return const_cast<TOptional*
>(
this)->operator->();
468 return const_cast<TOptional*
>(
this)->
operator*();
491#if PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
501#if PLATFORM_COMPILER_SUPPORTS_CONSTRAINED_DESTRUCTORS
511template<
typename OptionalType>
518template<
typename OptionalType>
527template <
typename T>
static constexpr bool TIsTOptional_V =
false;
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
EInPlace
Definition CoreMiscDefines.h:162
@ InPlace
Definition CoreMiscDefines.h:162
FArchive & operator<<(FArchive &Ar, TOptional< OptionalType > &Optional)
Definition Optional.h:512
auto GetTypeHash(const TOptional< OptionalType > &Optional) -> decltype(GetTypeHash(*Optional))
Definition Optional.h:519
constexpr FNullOpt NullOpt
Definition Optional.h:15
FORCEINLINE constexpr void DestructItem(ElementType *Element)
Definition MemoryOps.h:56
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTempIfPossible(T &&Obj) noexcept
Definition UnrealTemplate.h:538
if(Failed) console_printf("Failed.\n")
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
implementation
Definition PlayInEditorLoadingScope.h:8
@ false
Definition radaudio_common.h:23
Definition IntrusiveUnsetOptionalState.h:71
Definition OptionalFwd.h:13
Definition Optional.h:131
constexpr TOptional()
Definition Optional.h:200
TOptional & operator=(const OptionalType &InValue)
Definition Optional.h:289
constexpr ~TOptional()=default
void Serialize(FArchive &Ar)
Definition Optional.h:397
constexpr TOptional(OptionalType &&InValue)
Definition Optional.h:149
constexpr TOptional(FNullOpt)
Definition Optional.h:194
constexpr OptionalType & GetValue()
Definition Optional.h:443
UE_FORCEINLINE_HINT constexpr const OptionalType * GetPtrOrNull() const
Definition Optional.h:482
UE_FORCEINLINE_HINT constexpr const OptionalType & operator*() const
Definition Optional.h:466
UE_FORCEINLINE_HINT constexpr const OptionalType & GetValue() const
Definition Optional.h:448
friend constexpr bool operator!=(const TOptional &Lhs, const TOptional &Rhs)
Definition Optional.h:392
TOptional & operator=(OptionalType &&InValue)
Definition Optional.h:297
constexpr bool IsSet() const
Definition Optional.h:69
constexpr OptionalType * GetPtrOrNull()
Definition Optional.h:478
friend constexpr bool operator==(const TOptional &Lhs, const TOptional &Rhs)
Definition Optional.h:375
void Reset()
Definition Optional.h:306
TOptional(TOptional &&Other)
Definition Optional.h:243
OptionalType & Emplace(ArgsType &&... Args)
Definition Optional.h:323
TOptional & operator=(const TOptional &Other)
Definition Optional.h:258
constexpr OptionalType & operator*()
Definition Optional.h:462
TOptional(const TOptional &Other)
Definition Optional.h:229
UE_FORCEINLINE_HINT constexpr const OptionalType * operator->() const
Definition Optional.h:457
OptionalType ElementType
Definition Optional.h:142
constexpr TOptional()
Definition Optional.h:210
constexpr TOptional(const OptionalType &InValue)
Definition Optional.h:145
constexpr TOptional(EInPlace, ArgTypes &&... Args)
Definition Optional.h:154
constexpr OptionalType * operator->()
Definition Optional.h:453
constexpr const OptionalType & Get(const OptionalType &DefaultValue UE_LIFETIMEBOUND) const UE_LIFETIMEBOUND
Definition Optional.h:472
TOptional & operator=(TOptional &&Other)
Definition Optional.h:273
static constexpr bool IsSet(Derived *This)
Definition Optional.h:27
constexpr bool IsSet() const
Definition Optional.h:109
constexpr TOptionalBase(EInPlace, ArgTypes &&... InArgs)
Definition Optional.h:96
constexpr TOptionalBase()
Definition Optional.h:91
constexpr ~TOptionalBase()
Definition Optional.h:101
OptionalType TypedValue
Definition Optional.h:85
UE_FORCEINLINE_HINT constexpr void DestroyValue()
Definition Optional.h:114
UE_NO_UNIQUE_ADDRESS std::conditional_t< bUsingIntrusiveUnsetState, FEmpty, bool > bIsSet
Definition Optional.h:54
constexpr bool IsSet() const
Definition Optional.h:69
UE_FORCEINLINE_HINT constexpr void DestroyValue()
Definition Optional.h:74
constexpr TOptionalBase(EInPlace, ArgTypes &&... InArgs)
Definition Optional.h:61
OptionalType TypedValue
Definition Optional.h:50
static constexpr bool bUsingIntrusiveUnsetState
Definition Optional.h:53
constexpr ~TOptionalBase()=default
constexpr TOptionalBase()
Definition Optional.h:56