refactor(typetraits): replaces template class type traits with concepts for TypeTraits/TypeProperties.h
This commit is contained in:
@ -364,7 +364,7 @@ private:
|
||||
TypeInfo = reinterpret_cast<uintptr>(&SelectedTypeInfo);
|
||||
|
||||
constexpr bool bIsInlineStorable = sizeof(SelectedType) <= InlineSize && alignof(SelectedType) <= InlineAlignment;
|
||||
constexpr bool bIsTriviallyStorable = bIsInlineStorable && TIsTrivial<SelectedType>::Value && TIsTriviallyCopyable<SelectedType>::Value;
|
||||
constexpr bool bIsTriviallyStorable = bIsInlineStorable && CTrivial<SelectedType> && CTriviallyCopyable<SelectedType>;
|
||||
|
||||
if constexpr (bIsTriviallyStorable)
|
||||
{
|
||||
|
@ -51,7 +51,7 @@ NAMESPACE_PRIVATE_END
|
||||
|
||||
#endif
|
||||
|
||||
template <typename T, bool bIsRef = false> requires TIsTriviallyCopyable<T>::Value
|
||||
template <typename T, bool bIsRef = false> requires CTriviallyCopyable<T>
|
||||
&& TIsCopyConstructible<T>::Value && TIsMoveConstructible<T>::Value
|
||||
&& TIsCopyAssignable<T>::Value && TIsMoveAssignable<T>::Value
|
||||
struct TAtomic : public FSingleton
|
||||
|
@ -18,8 +18,8 @@ template <typename T> concept CScalar = NAMESPACE_STD::is_scalar_v<T>;
|
||||
template <typename T> concept CCompound = NAMESPACE_STD::is_compound_v<T>;
|
||||
template <typename T> concept CMemberPointer = NAMESPACE_STD::is_member_pointer_v<T>;
|
||||
|
||||
template <typename T> concept CSignedIntegral = CIntegral<T> && TIsSigned<T>::Value;
|
||||
template <typename T> concept CUnsignedIntegral = CIntegral<T> && TIsUnsigned<T>::Value;
|
||||
template <typename T> concept CSignedIntegral = CIntegral<T> && CSigned<T>;
|
||||
template <typename T> concept CUnsignedIntegral = CIntegral<T> && CUnsigned<T>;
|
||||
|
||||
NAMESPACE_MODULE_END(Utility)
|
||||
NAMESPACE_MODULE_END(Redcraft)
|
||||
|
@ -10,24 +10,22 @@ NAMESPACE_REDCRAFT_BEGIN
|
||||
NAMESPACE_MODULE_BEGIN(Redcraft)
|
||||
NAMESPACE_MODULE_BEGIN(Utility)
|
||||
|
||||
template <typename T> struct TIsConst : TBoolConstant<NAMESPACE_STD::is_const_v<T>> { };
|
||||
template <typename T> struct TIsVolatile : TBoolConstant<NAMESPACE_STD::is_volatile_v<T>> { };
|
||||
template <typename T> struct TIsTrivial : TBoolConstant<NAMESPACE_STD::is_trivial_v<T>> { };
|
||||
template <typename T> struct TIsTriviallyCopyable : TBoolConstant<NAMESPACE_STD::is_trivially_copyable_v<T>> { };
|
||||
template <typename T> struct TIsStandardLayout : TBoolConstant<NAMESPACE_STD::is_standard_layout_v<T>> { };
|
||||
template <typename T> struct THasUniqueObjectRepresentations : TBoolConstant<NAMESPACE_STD::has_unique_object_representations_v<T>> { };
|
||||
template <typename T> struct TIsEmpty : TBoolConstant<NAMESPACE_STD::is_empty_v<T>> { };
|
||||
template <typename T> struct TIsPolymorphic : TBoolConstant<NAMESPACE_STD::is_polymorphic_v<T>> { };
|
||||
template <typename T> struct TIsAbstract : TBoolConstant<NAMESPACE_STD::is_abstract_v<T>> { };
|
||||
template <typename T> struct TIsFinal : TBoolConstant<NAMESPACE_STD::is_final_v<T>> { };
|
||||
template <typename T> struct TIsAggregate : TBoolConstant<NAMESPACE_STD::is_aggregate_v<T>> { };
|
||||
template <typename T> struct TIsSigned : TBoolConstant<NAMESPACE_STD::is_signed_v<T>> { };
|
||||
template <typename T> struct TIsUnsigned : TBoolConstant<NAMESPACE_STD::is_unsigned_v<T>> { };
|
||||
template <typename T> struct TIsBoundedArray : TBoolConstant<NAMESPACE_STD::is_bounded_array_v<T>> { };
|
||||
template <typename T> struct TIsUnboundedArray : TBoolConstant<NAMESPACE_STD::is_unbounded_array_v<T>> { };
|
||||
|
||||
template <typename T>
|
||||
struct TIsScopedEnum : TBoolConstant<CEnum<T> && !TIsConvertible<T, int64>::Value> { };
|
||||
template <typename T> concept CConst = NAMESPACE_STD::is_const_v<T>;
|
||||
template <typename T> concept CVolatile = NAMESPACE_STD::is_volatile_v<T>;
|
||||
template <typename T> concept CTrivial = NAMESPACE_STD::is_trivial_v<T>;
|
||||
template <typename T> concept CTriviallyCopyable = NAMESPACE_STD::is_trivially_copyable_v<T>;
|
||||
template <typename T> concept CStandardLayout = NAMESPACE_STD::is_standard_layout_v<T>;
|
||||
template <typename T> concept CUniqueObjectRepresentible = NAMESPACE_STD::has_unique_object_representations_v<T>;
|
||||
template <typename T> concept CEmpty = NAMESPACE_STD::is_empty_v<T>;
|
||||
template <typename T> concept CPolymorphic = NAMESPACE_STD::is_polymorphic_v<T>;
|
||||
template <typename T> concept CAbstract = NAMESPACE_STD::is_abstract_v<T>;
|
||||
template <typename T> concept CFinal = NAMESPACE_STD::is_final_v<T>;
|
||||
template <typename T> concept CAggregate = NAMESPACE_STD::is_aggregate_v<T>;
|
||||
template <typename T> concept CSigned = NAMESPACE_STD::is_signed_v<T>;
|
||||
template <typename T> concept CUnsigned = NAMESPACE_STD::is_unsigned_v<T>;
|
||||
template <typename T> concept CBoundedArray = NAMESPACE_STD::is_bounded_array_v<T>;
|
||||
template <typename T> concept CUnboundedArray = NAMESPACE_STD::is_unbounded_array_v<T>;
|
||||
template <typename T> concept CScopedEnum = CEnum<T> && !TIsConvertible<T, int64>::Value;
|
||||
|
||||
NAMESPACE_MODULE_END(Utility)
|
||||
NAMESPACE_MODULE_END(Redcraft)
|
||||
|
Reference in New Issue
Block a user