#pragma once #include "CoreTypes.h" #include "TypeTraits/TypeTraits.h" NAMESPACE_REDCRAFT_BEGIN NAMESPACE_MODULE_BEGIN(Redcraft) NAMESPACE_MODULE_BEGIN(Utility) template concept CInvocable = requires(F&& Func, Types&&... Args) { Invoke(Forward(Func), Forward(Args)...); }; template concept CRegularInvocable = CInvocable; template concept CPredicate = CRegularInvocable && CBooleanTestable::Type>; template concept CRelation = CPredicate && CPredicate && CPredicate && CPredicate; template concept CEquivalenceRelation = CRelation; template concept CStrictWeakOrder = CRelation; NAMESPACE_MODULE_END(Utility) NAMESPACE_MODULE_END(Redcraft) NAMESPACE_REDCRAFT_END