Boost logo

Boost :

From: Kevlin Henney (Kevlin.Henney_at_[hidden])
Date: 2000-01-14 04:25:27

Braden N. McDaniel wrote:
>> Is there any way to downcast a shared_ptr? That is, the effect of
>> shared_ptr<Base> base(new Base);
>Um. Oops. The above line should of course be
> shared_ptr<Base> base(new Derived);
>> shared_ptr<Derived> derived(base);

The short answer is "no, not at the moment". It is unlikely that you would
want such a narrowing conversion to be implicit: A keyword cast is probably
the most appropriate solution, eg

      template<typename Target, typename Source>
      inline shared_ptr<Target> dynamic_shared_cast(const
shared_ptr<Source> & arg)
          shared_ptr<Target> result;

          if(Target * got = dynamic_cast<Target *>(arg.get()))
              result.px = got;
              ++*( =;

          return result;

I recently raised this issue with Greg, who had been aware of it for some


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