#pragma once #include "CoreTypes.h" #include "Concepts/Convertible.h" #include "TypeTraits/TypeTraits.h" #include "Concepts/Destructible.h" #include NAMESPACE_REDCRAFT_BEGIN NAMESPACE_MODULE_BEGIN(Redcraft) NAMESPACE_MODULE_BEGIN(Utility) template concept CConstructibleFrom = CDestructible && TIsConstructible::Value; template concept CDefaultInitializable = CConstructibleFrom && requires { T{}; ::new(static_cast(nullptr)) T; }; template concept CMoveConstructible = CConstructibleFrom && CConvertibleTo; template concept CCopyConstructible = CMoveConstructible && CConstructibleFrom && CConvertibleTo && CConstructibleFrom && CConvertibleTo && CConstructibleFrom && CConvertibleTo; NAMESPACE_MODULE_END(Utility) NAMESPACE_MODULE_END(Redcraft) NAMESPACE_REDCRAFT_END