|
|
@@ -2,54 +2,54 @@ module;
|
|
|
|
|
|
export module Core.Meta;
|
|
|
|
|
|
-export namespace Core {
|
|
|
- namespace Internal {
|
|
|
- template<typename T>
|
|
|
- struct BaseRemovePointer final {
|
|
|
- using Type = T;
|
|
|
- };
|
|
|
-
|
|
|
- template<typename T>
|
|
|
- struct BaseRemovePointer<T*> final {
|
|
|
- using Type = T;
|
|
|
- };
|
|
|
-
|
|
|
- template<typename T>
|
|
|
- struct BaseRemoveReference final {
|
|
|
- using Type = T;
|
|
|
- };
|
|
|
-
|
|
|
- template<typename T>
|
|
|
- struct BaseRemoveReference<T&> final {
|
|
|
- using Type = T;
|
|
|
- };
|
|
|
-
|
|
|
- template<typename T>
|
|
|
- struct BaseRemoveReference<T&&> final {
|
|
|
- using Type = T;
|
|
|
- };
|
|
|
-
|
|
|
- template<typename A, typename B>
|
|
|
- struct BaseIsSame final {
|
|
|
- static constexpr bool value = false;
|
|
|
- };
|
|
|
-
|
|
|
- template<typename T>
|
|
|
- struct BaseIsSame<T, T> final {
|
|
|
- static constexpr bool value = true;
|
|
|
- };
|
|
|
-
|
|
|
- template<bool C, typename A, typename B>
|
|
|
- struct BaseIf final {
|
|
|
- using Type = A;
|
|
|
- };
|
|
|
-
|
|
|
- template<typename A, typename B>
|
|
|
- struct BaseIf<false, A, B> final {
|
|
|
- using Type = B;
|
|
|
- };
|
|
|
- }
|
|
|
+namespace Core {
|
|
|
+ template<typename T>
|
|
|
+ struct BaseRemovePointer final {
|
|
|
+ using Type = T;
|
|
|
+ };
|
|
|
+
|
|
|
+ template<typename T>
|
|
|
+ struct BaseRemovePointer<T*> final {
|
|
|
+ using Type = T;
|
|
|
+ };
|
|
|
+
|
|
|
+ template<typename T>
|
|
|
+ struct BaseRemoveReference final {
|
|
|
+ using Type = T;
|
|
|
+ };
|
|
|
+
|
|
|
+ template<typename T>
|
|
|
+ struct BaseRemoveReference<T&> final {
|
|
|
+ using Type = T;
|
|
|
+ };
|
|
|
+
|
|
|
+ template<typename T>
|
|
|
+ struct BaseRemoveReference<T&&> final {
|
|
|
+ using Type = T;
|
|
|
+ };
|
|
|
+
|
|
|
+ template<typename A, typename B>
|
|
|
+ struct BaseIsSame final {
|
|
|
+ static constexpr bool value = false;
|
|
|
+ };
|
|
|
+
|
|
|
+ template<typename T>
|
|
|
+ struct BaseIsSame<T, T> final {
|
|
|
+ static constexpr bool value = true;
|
|
|
+ };
|
|
|
|
|
|
+ template<bool C, typename A, typename B>
|
|
|
+ struct BaseIf final {
|
|
|
+ using Type = A;
|
|
|
+ };
|
|
|
+
|
|
|
+ template<typename A, typename B>
|
|
|
+ struct BaseIf<false, A, B> final {
|
|
|
+ using Type = B;
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+export namespace Core {
|
|
|
template<typename T>
|
|
|
concept Iterable = requires(T& t) {
|
|
|
t.begin();
|
|
|
@@ -57,16 +57,16 @@ export namespace Core {
|
|
|
};
|
|
|
|
|
|
template<typename T>
|
|
|
- using RemovePointer = Internal::BaseRemovePointer<T>::Type;
|
|
|
+ using RemovePointer = BaseRemovePointer<T>::Type;
|
|
|
|
|
|
template<typename T>
|
|
|
- using RemoveReference = Internal::BaseRemoveReference<T>::Type;
|
|
|
+ using RemoveReference = BaseRemoveReference<T>::Type;
|
|
|
|
|
|
template<typename T, typename U>
|
|
|
- constexpr bool IsSame = Internal::BaseIsSame<T, U>::value;
|
|
|
+ constexpr bool IsSame = BaseIsSame<T, U>::value;
|
|
|
|
|
|
template<bool C, typename A, typename B>
|
|
|
- using If = Internal::BaseIf<C, A, B>::Type;
|
|
|
+ using If = BaseIf<C, A, B>::Type;
|
|
|
|
|
|
template<typename T>
|
|
|
constexpr RemoveReference<T>&& move(T&& t) {
|