// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #ifndef COMMON_REF_H #define COMMON_REF_H #include namespace ceph { template using ref_t = boost::intrusive_ptr; template using cref_t = boost::intrusive_ptr; template ref_t ref_cast(const ref_t& r) noexcept { return static_cast(r.get()); } template ref_t ref_cast(ref_t&& r) noexcept { return {static_cast(r.detach()), false}; } template cref_t ref_cast(const cref_t& r) noexcept { return static_cast(r.get()); } template ceph::ref_t make_ref(Args&&... args) { return {new T(std::forward(args)...), false}; } } // Friends cannot be partial specializations: https://en.cppreference.com/w/cpp/language/friend #define FRIEND_MAKE_REF(C) \ template friend ceph::ref_t ceph::make_ref(Args&&... args) #endif