隐式向下转换std :: shared_ptr。为什么编译?

时间:2014-07-22 13:05:28

标签: c++ c++11

我的理解是,将std::shared_ptr<Base>投射到您需要使用std::shared_ptr<Derived>的{​​{1}}。但是我发现我能够使用g ++ 4.7执行以下操作,但我不知道为什么。我怀疑它是一个编译器错误,但我想知道标准中是否有某些东西我错过了。

BaseClass.h

std::dynamic_pointer_cast

DerivedClass.h

class BaseClass
{
   template<typename PtrType = BaseClass> using Ptr = std::shared_ptr<PtrType>;
   // ...
};

EvenMoreDerivedClass.h

class DerivedClass : public BaseClass
{
    //...
    BaseClass::Ptr<SomeType> GetChild() { return m_child; }

    BaseClass::Ptr<SomeType> m_child;
    //..
};

EvenMoreDerivedClass.cpp

template<typename T>
class EvenMoreDerivedClass : public DerivedClass
{
    // ...
    MethodUsingChildClass();
    // ... 
};

0 个答案:

没有答案