From 445d61db3fb31e486902e7dee35d210a70df8ebc Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Fri, 10 Mar 2023 17:11:05 +0700 Subject: [PATCH] disable rvalue values for ucast --- develop/singles/headers/meta.hpp/meta_all.hpp | 72 +++++++++---------- headers/meta.hpp/meta_base/base.hpp | 34 ++++----- headers/meta.hpp/meta_ucast.hpp | 12 ++-- headers/meta.hpp/meta_ucast/ucast.hpp | 26 +++---- 4 files changed, 68 insertions(+), 76 deletions(-) diff --git a/develop/singles/headers/meta.hpp/meta_all.hpp b/develop/singles/headers/meta.hpp/meta_all.hpp index a92b08c..a99d657 100644 --- a/develop/singles/headers/meta.hpp/meta_all.hpp +++ b/develop/singles/headers/meta.hpp/meta_all.hpp @@ -63,22 +63,12 @@ # define META_HPP_PP_CAT_I(x, y) x##y #endif -#if defined(_MSC_VER) -# define META_HPP_MSVC -#elif defined(__clang__) +#if defined(__clang__) # define META_HPP_CLANG #elif defined(__GNUC__) # define META_HPP_GCC -#endif - -#if defined(META_HPP_MSVC) -# define META_HPP_MSVC_IGNORE_WARNING(w) __pragma(warning(disable : w)) -# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() __pragma(warning(push)) -# define META_HPP_MSVC_IGNORE_WARNINGS_POP() __pragma(warning(pop)) -#else -# define META_HPP_MSVC_IGNORE_WARNING(w) -# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() -# define META_HPP_MSVC_IGNORE_WARNINGS_POP() +#elif defined(_MSC_VER) +# define META_HPP_MSVC #endif #if defined(META_HPP_CLANG) @@ -105,17 +95,23 @@ # define META_HPP_GCC_IGNORE_WARNINGS_POP() #endif +#if defined(META_HPP_MSVC) +# define META_HPP_MSVC_IGNORE_WARNING(w) __pragma(warning(disable : w)) +# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() __pragma(warning(push)) +# define META_HPP_MSVC_IGNORE_WARNINGS_POP() __pragma(warning(pop)) +#else +# define META_HPP_MSVC_IGNORE_WARNING(w) +# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() +# define META_HPP_MSVC_IGNORE_WARNINGS_POP() +#endif + #define META_HPP_IGNORE_OVERRIDE_WARNINGS_PUSH() \ - META_HPP_MSVC_IGNORE_WARNINGS_PUSH() \ META_HPP_CLANG_IGNORE_WARNINGS_PUSH() \ - META_HPP_GCC_IGNORE_WARNINGS_PUSH() \ + META_HPP_CLANG_IGNORE_WARNING("-Wunknown-warning-option") \ META_HPP_CLANG_IGNORE_WARNING("-Winconsistent-missing-override") \ META_HPP_CLANG_IGNORE_WARNING("-Wsuggest-override") -#define META_HPP_IGNORE_OVERRIDE_WARNINGS_POP() \ - META_HPP_GCC_IGNORE_WARNINGS_POP() \ - META_HPP_CLANG_IGNORE_WARNINGS_POP() \ - META_HPP_MSVC_IGNORE_WARNINGS_POP()\ +#define META_HPP_IGNORE_OVERRIDE_WARNINGS_POP() META_HPP_CLANG_IGNORE_WARNINGS_POP() namespace meta_hpp::detail { @@ -9119,11 +9115,11 @@ namespace meta_hpp::detail typename From, typename ToDT = std::remove_reference_t, typename FromDT = std::remove_reference_t > - concept reference_ucast_kind // - = (std::is_reference_v && std::is_class_v) // - && (std::is_reference_v && std::is_class_v) // - && (!std::is_const_v || std::is_const_v) // - && (!std::is_volatile_v || std::is_volatile_v); // + concept lvalue_reference_ucast_kind // + = (std::is_lvalue_reference_v && std::is_class_v) // + && (std::is_lvalue_reference_v && std::is_class_v) // + && (!std::is_const_v || std::is_const_v) // + && (!std::is_volatile_v || std::is_volatile_v); // } namespace meta_hpp @@ -9133,7 +9129,7 @@ namespace meta_hpp To ucast(From from); template < typename To, typename From > - requires detail::reference_ucast_kind + requires detail::lvalue_reference_ucast_kind To ucast(From&& from); } @@ -9170,24 +9166,24 @@ namespace meta_hpp if constexpr ( std::is_same_v, std::remove_cv_t> ) { return from; - } - - detail::type_registry& registry{detail::type_registry::instance()}; - const detail::polymorphic_meta_info& meta_info{from->get_most_derived_polymorphic_meta_info(registry)}; - - // NOLINTNEXTLINE(*-const-cast) - void* most_derived_object_ptr = const_cast(meta_info.ptr); - - if constexpr ( std::is_void_v> ) { - return most_derived_object_ptr; } else { - const class_type& to_class_type = registry.resolve_class_type(); - return static_cast(detail::pointer_upcast(most_derived_object_ptr, meta_info.type, to_class_type)); + detail::type_registry& registry{detail::type_registry::instance()}; + const detail::polymorphic_meta_info& meta_info{from->get_most_derived_polymorphic_meta_info(registry)}; + + // NOLINTNEXTLINE(*-const-cast) + void* most_derived_object_ptr = const_cast(meta_info.ptr); + + if constexpr ( std::is_void_v> ) { + return most_derived_object_ptr; + } else { + const class_type& to_class_type = registry.resolve_class_type(); + return static_cast(detail::pointer_upcast(most_derived_object_ptr, meta_info.type, to_class_type)); + } } } template < typename To, typename From > - requires detail::reference_ucast_kind + requires detail::lvalue_reference_ucast_kind To ucast(From&& from) { using from_data_type = std::remove_reference_t; using to_data_type = std::remove_reference_t; diff --git a/headers/meta.hpp/meta_base/base.hpp b/headers/meta.hpp/meta_base/base.hpp index 204d4e2..48be7a1 100644 --- a/headers/meta.hpp/meta_base/base.hpp +++ b/headers/meta.hpp/meta_base/base.hpp @@ -64,22 +64,12 @@ # define META_HPP_PP_CAT_I(x, y) x##y #endif -#if defined(_MSC_VER) -# define META_HPP_MSVC -#elif defined(__clang__) +#if defined(__clang__) # define META_HPP_CLANG #elif defined(__GNUC__) # define META_HPP_GCC -#endif - -#if defined(META_HPP_MSVC) -# define META_HPP_MSVC_IGNORE_WARNING(w) __pragma(warning(disable : w)) -# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() __pragma(warning(push)) -# define META_HPP_MSVC_IGNORE_WARNINGS_POP() __pragma(warning(pop)) -#else -# define META_HPP_MSVC_IGNORE_WARNING(w) -# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() -# define META_HPP_MSVC_IGNORE_WARNINGS_POP() +#elif defined(_MSC_VER) +# define META_HPP_MSVC #endif #if defined(META_HPP_CLANG) @@ -106,14 +96,20 @@ # define META_HPP_GCC_IGNORE_WARNINGS_POP() #endif +#if defined(META_HPP_MSVC) +# define META_HPP_MSVC_IGNORE_WARNING(w) __pragma(warning(disable : w)) +# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() __pragma(warning(push)) +# define META_HPP_MSVC_IGNORE_WARNINGS_POP() __pragma(warning(pop)) +#else +# define META_HPP_MSVC_IGNORE_WARNING(w) +# define META_HPP_MSVC_IGNORE_WARNINGS_PUSH() +# define META_HPP_MSVC_IGNORE_WARNINGS_POP() +#endif + #define META_HPP_IGNORE_OVERRIDE_WARNINGS_PUSH() \ - META_HPP_MSVC_IGNORE_WARNINGS_PUSH() \ META_HPP_CLANG_IGNORE_WARNINGS_PUSH() \ - META_HPP_GCC_IGNORE_WARNINGS_PUSH() \ + META_HPP_CLANG_IGNORE_WARNING("-Wunknown-warning-option") \ META_HPP_CLANG_IGNORE_WARNING("-Winconsistent-missing-override") \ META_HPP_CLANG_IGNORE_WARNING("-Wsuggest-override") -#define META_HPP_IGNORE_OVERRIDE_WARNINGS_POP() \ - META_HPP_GCC_IGNORE_WARNINGS_POP() \ - META_HPP_CLANG_IGNORE_WARNINGS_POP() \ - META_HPP_MSVC_IGNORE_WARNINGS_POP() +#define META_HPP_IGNORE_OVERRIDE_WARNINGS_POP() META_HPP_CLANG_IGNORE_WARNINGS_POP() diff --git a/headers/meta.hpp/meta_ucast.hpp b/headers/meta.hpp/meta_ucast.hpp index 2481d87..35dd5fc 100644 --- a/headers/meta.hpp/meta_ucast.hpp +++ b/headers/meta.hpp/meta_ucast.hpp @@ -26,11 +26,11 @@ namespace meta_hpp::detail typename From, typename ToDT = std::remove_reference_t, typename FromDT = std::remove_reference_t > - concept reference_ucast_kind // - = (std::is_reference_v && std::is_class_v) // - && (std::is_reference_v && std::is_class_v) // - && (!std::is_const_v || std::is_const_v) // - && (!std::is_volatile_v || std::is_volatile_v); // + concept lvalue_reference_ucast_kind // + = (std::is_lvalue_reference_v && std::is_class_v) // + && (std::is_lvalue_reference_v && std::is_class_v) // + && (!std::is_const_v || std::is_const_v) // + && (!std::is_volatile_v || std::is_volatile_v); // } namespace meta_hpp @@ -40,6 +40,6 @@ namespace meta_hpp To ucast(From from); template < typename To, typename From > - requires detail::reference_ucast_kind + requires detail::lvalue_reference_ucast_kind To ucast(From&& from); } diff --git a/headers/meta.hpp/meta_ucast/ucast.hpp b/headers/meta.hpp/meta_ucast/ucast.hpp index 4d23e9b..b4fbd57 100644 --- a/headers/meta.hpp/meta_ucast/ucast.hpp +++ b/headers/meta.hpp/meta_ucast/ucast.hpp @@ -45,24 +45,24 @@ namespace meta_hpp if constexpr ( std::is_same_v, std::remove_cv_t> ) { return from; - } - - detail::type_registry& registry{detail::type_registry::instance()}; - const detail::polymorphic_meta_info& meta_info{from->get_most_derived_polymorphic_meta_info(registry)}; - - // NOLINTNEXTLINE(*-const-cast) - void* most_derived_object_ptr = const_cast(meta_info.ptr); - - if constexpr ( std::is_void_v> ) { - return most_derived_object_ptr; } else { - const class_type& to_class_type = registry.resolve_class_type(); - return static_cast(detail::pointer_upcast(most_derived_object_ptr, meta_info.type, to_class_type)); + detail::type_registry& registry{detail::type_registry::instance()}; + const detail::polymorphic_meta_info& meta_info{from->get_most_derived_polymorphic_meta_info(registry)}; + + // NOLINTNEXTLINE(*-const-cast) + void* most_derived_object_ptr = const_cast(meta_info.ptr); + + if constexpr ( std::is_void_v> ) { + return most_derived_object_ptr; + } else { + const class_type& to_class_type = registry.resolve_class_type(); + return static_cast(detail::pointer_upcast(most_derived_object_ptr, meta_info.type, to_class_type)); + } } } template < typename To, typename From > - requires detail::reference_ucast_kind + requires detail::lvalue_reference_ucast_kind To ucast(From&& from) { using from_data_type = std::remove_reference_t; using to_data_type = std::remove_reference_t;