#include #include #include struct X: public boost::enable_shared_from_this {}; void null_deleter(const void *) {} template bool are_shared_owners(const boost::shared_ptr &a, const boost::shared_ptr &b) { return a && !(a < b) && !(b < a); } int main() { boost::shared_ptr px(new X); boost::shared_ptr first_sft = px->shared_from_this(); boost::shared_ptr px2(px.get(), &null_deleter); boost::shared_ptr second_sft = px->shared_from_this(); std::cout << "are_shared_owners = " << are_shared_owners(first_sft, second_sft) << std::endl; return 0; }