summaryrefslogtreecommitdiff
path: root/asl/base/meta.hpp
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-03-26 18:54:53 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-03-26 18:54:53 +0100
commite034efe8bd911ae86447dbae7e10e57c7247d3c7 (patch)
treeb67a5ec6e01d6bf7fce09d5bf9ff7066dfe5deff /asl/base/meta.hpp
parent2c457c42758f1aeb5e2ec15f89b9702586328220 (diff)
Add member pointer stuff to meta lib
Diffstat (limited to 'asl/base/meta.hpp')
-rw-r--r--asl/base/meta.hpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/asl/base/meta.hpp b/asl/base/meta.hpp
index 93e5603..b17f05c 100644
--- a/asl/base/meta.hpp
+++ b/asl/base/meta.hpp
@@ -194,6 +194,17 @@ template<typename R, typename... Args> struct _is_func_helper<R(Args...)> : true
template<typename T> concept is_func = _is_func_helper<tame_t<T>>::value;
+template<typename T> struct _is_member_ptr_helper : false_type {};
+template<typename C, typename T> struct _is_member_ptr_helper<T C::*> : true_type
+{
+ static constexpr bool kIsFunc = is_func<T>;
+};
+
+template<typename T> concept is_member_ptr = _is_member_ptr_helper<un_cv_t<T>>::value;
+
+template<typename T> concept is_member_func_ptr = is_member_ptr<T> && _is_member_ptr_helper<un_cv_t<T>>::kIsFunc;
+template<typename T> concept is_member_data_ptr = is_member_ptr<T> && !_is_member_ptr_helper<un_cv_t<T>>::kIsFunc;
+
template<typename T> concept is_object = !is_void<T> && !is_ref<T> && !is_func<T>;
template<typename T> struct _array_helper : false_type { using type = T; };