From 9d8d3faa3d28e26e78a5102e2046fb47d1d8dd25 Mon Sep 17 00:00:00 2001 From: "Zezheng.Li" Date: Thu, 21 Sep 2023 10:54:15 +0800 Subject: [PATCH] fix concept --- include/ylt/struct_pack/reflection.hpp | 31 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/include/ylt/struct_pack/reflection.hpp b/include/ylt/struct_pack/reflection.hpp index 1d41725d7..339c5ec2c 100644 --- a/include/ylt/struct_pack/reflection.hpp +++ b/include/ylt/struct_pack/reflection.hpp @@ -15,6 +15,7 @@ */ #pragma once #include +#include #include #include #include @@ -167,13 +168,6 @@ concept has_user_defined_id_ADL = requires { struct_pack_id((T*)nullptr)>; }; - -template -concept is_base_class = requires (T* t){ - std::is_same_vget_struct_pack_id())>; - typename struct_pack::detail::derived_class_set_t; -}; - #else template @@ -213,6 +207,29 @@ constexpr bool has_user_defined_id_ADL = has_user_defined_id_ADL_impl::value; #endif + + +#if __cpp_concepts >= 201907L +template +concept is_base_class = requires (T* t) { + std::is_same_vget_struct_pack_id())>; + typename struct_pack::detail::derived_class_set_t; +}; +#else +template +struct is_base_class_impl : std::false_type {}; + +template +struct is_base_class_impl< + T, std::void_t< + std::enable_ifget_struct_pack_id()), uint32_t>>, + typename struct_pack::detail::derived_class_set_t>> + : std::true_type {}; +template +constexpr bool is_base_class=is_base_class_impl::value; + +#endif + #if __cpp_concepts >= 201907L template concept deserialize_view = requires(Type container) {