#pragma once #include "CoreTypes.h" #include "Concepts/Swappable.h" #include "Concepts/Assignable.h" #include "Concepts/Comparable.h" #include "TypeTraits/TypeTraits.h" #include "Concepts/Constructible.h" NAMESPACE_REDCRAFT_BEGIN NAMESPACE_MODULE_BEGIN(Redcraft) NAMESPACE_MODULE_BEGIN(Utility) template concept CMovable = TIsObject::Value && CMoveConstructible && CAssignableFrom && CSwappable; template concept CCopyable = CMovable && CCopyConstructible && CAssignableFrom && CAssignableFrom && CAssignableFrom; template concept CSemiregular = CCopyable && CDefaultInitializable; template concept CRegular = CSemiregular && CEqualityComparable; NAMESPACE_MODULE_END(Utility) NAMESPACE_MODULE_END(Redcraft) NAMESPACE_REDCRAFT_END