UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PointerIsConvertibleFromTo.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
8#include <type_traits>
9
11{
12 template <typename From, typename To, typename NoCVFrom = std::remove_cv_t<From>, typename NoCVTo = std::remove_cv_t<To>>
13 struct TImpl
14 {
15 private:
16 static uint8 Test(...);
17 static uint16 Test(To*);
18
19 UE_STATIC_ASSERT_COMPLETE_TYPE(From, "TPointerIsConvertibleFromTo must not be instantiated with incomplete types");
20 UE_STATIC_ASSERT_COMPLETE_TYPE(To, "TPointerIsConvertibleFromTo must not be instantiated with incomplete types");
21
22 public:
23 enum { Value = sizeof(Test((From*)nullptr)) - 1 };
24 };
25
26 template <typename From, typename To, typename NoCVFrom>
27 struct TImpl<From, To, NoCVFrom, NoCVFrom>
28 {
29 // cv T* to cv T* conversions are always allowed as long as no CVs are lost
31 };
32
33 template <typename From, typename To, typename NoCVFrom>
34 struct TImpl<From, To, NoCVFrom, void>
35 {
36 // cv T* to cv void* conversions are always allowed as long as no CVs are lost
38 };
39
40 template <typename From, typename To>
41 struct TImpl<From, To, void, void>
42 {
43 // cv void* to cv void* conversions are always allowed as long as no CVs are lost
45 };
46
47 template <typename From, typename To, typename NoCVTo>
48 struct TImpl<From, To, void, NoCVTo>
49 {
50 // cv void* to cv not_void* conversions are never legal
51 enum { Value = false };
52 };
53}
54
58template <typename From, typename To>
62
63
67
71
75
76static_assert(TPointerIsConvertibleFromTo<bool, bool>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
77static_assert(TPointerIsConvertibleFromTo<void, void>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
78static_assert(TPointerIsConvertibleFromTo<bool, void>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
79static_assert(TPointerIsConvertibleFromTo<const bool, const void>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
84static_assert(TPointerIsConvertibleFromTo<TPointerIsConvertibleFromTo_TestBase, void>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
85
88static_assert(!TPointerIsConvertibleFromTo<bool, TPointerIsConvertibleFromTo_TestBase>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
89static_assert(!TPointerIsConvertibleFromTo<void, TPointerIsConvertibleFromTo_TestBase>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
90static_assert(!TPointerIsConvertibleFromTo<TPointerIsConvertibleFromTo_TestBase, bool>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
91static_assert(!TPointerIsConvertibleFromTo<void, bool>::Value, "Platform TPointerIsConvertibleFromTo test failed.");
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_STATIC_ASSERT_COMPLETE_TYPE(TypeToCheck,...)
Definition StaticAssertCompleteType.h:62
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
Definition PointerIsConvertibleFromTo.h:65
Definition PointerIsConvertibleFromTo.h:69
Definition PointerIsConvertibleFromTo.h:73
Definition TestUtils.cpp:8
Definition PointerIsConvertibleFromTo.h:11
Definition PointerIsConvertibleFromTo.h:60
Definition PointerIsConvertibleFromTo.h:14
@ Value
Definition PointerIsConvertibleFromTo.h:23