From 9d7a536fd5c4387eb921e94e7aab2514dae702a8 Mon Sep 17 00:00:00 2001 From: Mingxin Wang Date: Fri, 11 Oct 2024 21:28:15 +0800 Subject: [PATCH 1/2] Add assertion --- proxy.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/proxy.h b/proxy.h index 92b35569..f25c531f 100644 --- a/proxy.h +++ b/proxy.h @@ -4,6 +4,7 @@ #ifndef _MSFT_PROXY_ #define _MSFT_PROXY_ +#include #include #include #include @@ -565,12 +566,14 @@ struct meta_ptr_reset_guard { template struct proxy_helper { - static inline const auto& get_meta(const proxy& p) noexcept - { return *p.meta_.operator->(); } + static inline const auto& get_meta(const proxy& p) noexcept { + assert(p.has_value()); + return *p.meta_.operator->(); + } template static decltype(auto) invoke(add_qualifier_t, Q> p, Args&&... args) { - auto dispatcher = p.meta_ - ->template dispatcher_meta + auto dispatcher = get_meta(p) + .template dispatcher_meta ::template meta_provider> ::dispatcher; if constexpr (C::is_direct && From 26a4d32e5a8dbe01ddafdac5cbefcc07ff9eb6f9 Mon Sep 17 00:00:00 2001 From: Mingxin Wang Date: Sat, 12 Oct 2024 20:01:11 +0800 Subject: [PATCH 2/2] Add another assertion --- proxy.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/proxy.h b/proxy.h index f25c531f..f54b1399 100644 --- a/proxy.h +++ b/proxy.h @@ -791,9 +791,12 @@ class proxy : public details::facade_traits::direct_accessor { private: template P& initialize(Args&&... args) { - std::construct_at(reinterpret_cast(ptr_), std::forward(args)...); + P& result = *std::construct_at( + reinterpret_cast(ptr_), std::forward(args)...); + if constexpr (requires { (bool)result; }) + { assert((bool)result); } meta_ = details::meta_ptr{std::in_place_type

}; - return *std::launder(reinterpret_cast(ptr_)); + return result; } [[___PRO_NO_UNIQUE_ADDRESS_ATTRIBUTE]]