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) {