From e034efe8bd911ae86447dbae7e10e57c7247d3c7 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Wed, 26 Mar 2025 18:54:53 +0100 Subject: Add member pointer stuff to meta lib --- asl/base/meta.hpp | 11 +++++++++++ asl/base/meta_tests.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) 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 struct _is_func_helper : true template concept is_func = _is_func_helper>::value; +template struct _is_member_ptr_helper : false_type {}; +template struct _is_member_ptr_helper : true_type +{ + static constexpr bool kIsFunc = is_func; +}; + +template concept is_member_ptr = _is_member_ptr_helper>::value; + +template concept is_member_func_ptr = is_member_ptr && _is_member_ptr_helper>::kIsFunc; +template concept is_member_data_ptr = is_member_ptr && !_is_member_ptr_helper>::kIsFunc; + template concept is_object = !is_void && !is_ref && !is_func; template struct _array_helper : false_type { using type = T; }; diff --git a/asl/base/meta_tests.cpp b/asl/base/meta_tests.cpp index bcd9775..65f367a 100644 --- a/asl/base/meta_tests.cpp +++ b/asl/base/meta_tests.cpp @@ -135,6 +135,12 @@ static_assert(!asl::is_ref); static_assert(!asl::is_ref); static_assert(!asl::is_ref); +struct MyClass +{ + int data; + int fn(int x) { return x; } // NOLINT +}; + static_assert(asl::is_ptr); static_assert(asl::is_ptr); static_assert(asl::is_ptr); @@ -142,6 +148,26 @@ static_assert(!asl::is_ptr); static_assert(!asl::is_ptr); static_assert(!asl::is_ptr); static_assert(!asl::is_ptr); +static_assert(!asl::is_ptr); +static_assert(!asl::is_ptr); + +static_assert(!asl::is_member_ptr); +static_assert(!asl::is_member_ptr); +static_assert(!asl::is_member_ptr); +static_assert(asl::is_member_ptr); +static_assert(asl::is_member_ptr); + +static_assert(!asl::is_member_data_ptr); +static_assert(!asl::is_member_data_ptr); +static_assert(!asl::is_member_data_ptr); +static_assert(asl::is_member_data_ptr); +static_assert(!asl::is_member_data_ptr); + +static_assert(!asl::is_member_func_ptr); +static_assert(!asl::is_member_func_ptr); +static_assert(!asl::is_member_func_ptr); +static_assert(!asl::is_member_func_ptr); +static_assert(asl::is_member_func_ptr); static_assert(asl::same_as>); static_assert(asl::same_as>); -- cgit