template<class T>
class SomeTemplate
{
public:
   SomeTemplate(T* p) { pData = p; }
   T* getPointer() { return pData; }
   template<class S>
   SomeTemplate(SomeTemplate<S> s)
   {
       pData = s.getPointer();
   }
private:
   T* pData;
};

class A {};
class B : public A {};

int main()
{
    SomeTemplate<B> b(new B());
    SomeTemplate<A> a(b);
    SomeTemplate<B> bb(a);
    return 0;
}