From 90c9db6651f852d24910451f4910663acdeb7d4e Mon Sep 17 00:00:00 2001 From: Mingxin Wang Date: Tue, 5 Mar 2024 16:18:10 +0800 Subject: [PATCH] Remove constraints on class template `proxy` and optimize memory layout for small VTABLE (#70) * Optimize for small vtable * Resolve build error * Renaming * Improve constraints for return type * Improve constraints on return type * Workaround GCC bug * Workaround GCC bug * Resolve comments * Simplity code --- proxy.h | 379 ++++++++++++++++++------------- tests/proxy_creation_tests.cpp | 32 ++- tests/proxy_reflection_tests.cpp | 4 +- tests/proxy_traits_tests.cpp | 23 +- 4 files changed, 262 insertions(+), 176 deletions(-) diff --git a/proxy.h b/proxy.h index aaf422c..4ec787f 100644 --- a/proxy.h +++ b/proxy.h @@ -24,27 +24,6 @@ struct proxiable_ptr_constraints { constraint_level relocatability; constraint_level destructibility; }; -constexpr proxiable_ptr_constraints relocatable_ptr_constraints{ - .max_size = sizeof(void*) * 2u, - .max_align = alignof(void*), - .copyability = constraint_level::none, - .relocatability = constraint_level::nothrow, - .destructibility = constraint_level::nothrow, -}; -constexpr proxiable_ptr_constraints copyable_ptr_constraints{ - .max_size = sizeof(void*) * 2u, - .max_align = alignof(void*), - .copyability = constraint_level::nontrivial, - .relocatability = constraint_level::nothrow, - .destructibility = constraint_level::nothrow, -}; -constexpr proxiable_ptr_constraints trivial_ptr_constraints{ - .max_size = sizeof(void*), - .max_align = alignof(void*), - .copyability = constraint_level::trivial, - .relocatability = constraint_level::trivial, - .destructibility = constraint_level::trivial, -}; namespace details { @@ -59,6 +38,16 @@ struct recursive_reduction template