diff --git a/Packets/PacketInterpreter.hh b/Packets/PacketInterpreter.hh index 80bb01662efae00bbd5de6587f708ef3690548ed..b42cb190f088248d4a9b75467d6e231f5729c85a 100644 --- a/Packets/PacketInterpreter.hh +++ b/Packets/PacketInterpreter.hh @@ -211,7 +211,7 @@ namespace senf { void releaseImpl(); friend class detail::PacketImpl; - friend class intrusive_refcount_t<PacketInterpreterBase>; + friend class intrusive_refcount_base; template <class PacketType> friend class PacketInterpreter; friend class detail::packet::test::TestDriver; friend class PacketParserBase; diff --git a/Utils/intrusive_refcount.cti b/Utils/intrusive_refcount.cti index a8ba41e16c3547ebfd705fe75930b520785c12e2..3e729e0c8cee50eeba92db27acbf791e2ab18b9b 100644 --- a/Utils/intrusive_refcount.cti +++ b/Utils/intrusive_refcount.cti @@ -30,28 +30,28 @@ #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// -template <class Self> -prefix_ void senf::intrusive_refcount_t<Self>::intrusive_ptr_add_ref() +template <class S> +prefix_ void senf::intrusive_refcount_base::intrusive_ptr_add_ref() { - static_cast<Self*>(this)->add_ref(); + static_cast<S*>(this)->add_ref(); } -template <class Self> -prefix_ void senf::intrusive_refcount_t<Self>::intrusive_ptr_release() +template <class S> +prefix_ void senf::intrusive_refcount_base::intrusive_ptr_release() { - if (static_cast<Self*>(this)->release()) delete this; + if (static_cast<S*>(this)->release()) delete this; } template <class Self> prefix_ void senf::intrusive_ptr_add_ref(intrusive_refcount_t<Self>* p) { - p->intrusive_ptr_add_ref(); + p->intrusive_ptr_add_ref<Self>(); } template <class Self> prefix_ void senf::intrusive_ptr_release(intrusive_refcount_t<Self>* p) { - p->intrusive_ptr_release(); + p->intrusive_ptr_release<Self>(); } template <class Self> diff --git a/Utils/intrusive_refcount.hh b/Utils/intrusive_refcount.hh index 8ce578571c7ac6d1f1df12c0fff55150536cde4f..7fb8f189c73373edc6ca08abb680c09549220143 100644 --- a/Utils/intrusive_refcount.hh +++ b/Utils/intrusive_refcount.hh @@ -61,6 +61,13 @@ namespace senf { private: refcount_t refcount_; + template <class S> void intrusive_ptr_add_ref(); + template <class S> void intrusive_ptr_release(); + + template <class S> + friend void senf::intrusive_ptr_add_ref(intrusive_refcount_t<S> * p); + template <class S> + friend void senf::intrusive_ptr_release(intrusive_refcount_t<S> * p); }; /** \brief Customizable reference count mixin for intrusive_ptr @@ -115,15 +122,6 @@ namespace senf { { protected: intrusive_refcount_t(); - - private: - void intrusive_ptr_add_ref(); - void intrusive_ptr_release(); - - template <class S> - friend void senf::intrusive_ptr_add_ref(intrusive_refcount_t<S> * p); - template <class S> - friend void senf::intrusive_ptr_release(intrusive_refcount_t<S> * p); }; /** \brief Reference count mixin for intrusive_ptr