Boost logo

Boost :

From: Gernot Neppert (gn_at_[hidden])
Date: 2000-07-27 09:05:57

I've been using the template class "shared_ptr" with a compiler that doesn't
support template friend declarations (You will have guessed already: It's
Microsoft VC++ 6).
So, the symbol BOOST_NO_MEMBER_TEMPLATE_FRIENDS is defined, and everything
works fine - except that the members of the class become publicly exposed.
This is really annoying, so I came up with a proposal. Although it
introduces an ugly reinterpret_cast, this is confined to two methods
(templated ctor and assignment operator), whereas the additional "public:"
affected the entire class. Here's the code for the ctor:

   template<typename Y>
      shared_ptr(const shared_ptr<Y>& r) throw() : px(r.get()) {
         ++*(pn = reinterpret_cast<const shared_ptr<T>&>( r ).pn);
#else // original version
 template<typename Y>
      shared_ptr(const shared_ptr<Y>& r) throw() : px(r.px) {
         ++*(pn =;


Boost list run by bdawes at, gregod at, cpdaniel at, john at