#include <iostream>
using namespace std;

template<typename T>
struct SharedPtr
{
	SharedPtr() {}
	
    template <class U> 
    SharedPtr(const SharedPtr<U>& value);
    
    T *_value;
};

template<typename T>
template<typename U>
SharedPtr<T>::SharedPtr(const SharedPtr<U> &value)
 : _value(value._value)
{ }

struct Base {};
struct Derived : Base {};

int main() {
	
	SharedPtr<Derived> dS;
	SharedPtr<Base> dB(dS);
	
	return 0;
}