#pragma once #include "CoreTypes.h" #include "Concepts/Same.h" #include "Templates/Utility.h" #include "Concepts/Convertible.h" #include "TypeTraits/TypeTraits.h" NAMESPACE_REDCRAFT_BEGIN NAMESPACE_MODULE_BEGIN(Redcraft) NAMESPACE_MODULE_BEGIN(Utility) template concept CCommonReferenceWith = requires { typename TCommonReference::Type; typename TCommonReference::Type; } && CSameAs::Type, typename TCommonReference::Type> && CConvertibleTo::Type>&& CConvertibleTo::Type>; template concept CCommonWith = requires { typename TCommonType::Type; typename TCommonType::Type; requires CSameAs::Type, typename TCommonType::Type>; static_cast::Type>(DeclVal()); static_cast::Type>(DeclVal()); } && CCommonReferenceWith && CCommonReferenceWith::Type&, typename TCommonReference::Type> && CSameAs::Type, typename TCommonReference::Type>; NAMESPACE_MODULE_END(Utility) NAMESPACE_MODULE_END(Redcraft) NAMESPACE_REDCRAFT_END