#pragma once
#include <type_traits>
namespace refl {
	template <class T>
	concept _ReflCheck_Ctor = requires { T(); };
	template <class T>
	concept _ReflCheck_UClass = requires{{T::UClass::BuildClass()} -> std::same_as<typename T::UClass>; };
	template <class T>
	concept _ReflCheck_Ctor_NoUClass = _ReflCheck_Ctor<T> && !_ReflCheck_UClass<T>;
	
	//主模板只有声明，没有定义，从而使得非特化非法
	template<typename T>
	struct TypeInfo;

	template<_ReflCheck_UClass T>
	struct TypeInfo<T> {
		using UClass = typename T::UClass;
		inline static UClass StaticClass = UClass::BuildClass();
	};
}