template <typename T>
class typedef_smart_ptr_to { // ←これ
public:
 typedef boost::shared_ptr<T> shared_ptr;
 typedef boost::weak_ptr<T> weak_ptr;
 typedef boost::scoped_ptr<T> scoped_ptr;
};

class Hoge : public typedef_smart_ptr_to<Hoge>
{
public:
 Hoge() {}

 void SetNext(const shared_ptr & pNext) { this->pNext = pNext; }
 shared_ptr GetNext() const { return this->pNext; }

private:
 shared_ptr pNext;
};

typedef_smart_ptr_to は自身を継承したクラスへの typedef を集めたクラスです

Q1. クラステンプレートをこんな風に使って大丈夫ですか?
Q2. これを継承したクラス(例では Hoge)にデメリットはありますか?