>>48
Hogeのテンプレート引数は必ずポインタ型であることが必要なら、
初めから元の型をテンプレート引数に取るようにするのが一番楽。

template <class T> class Hoge{
    T *p;
    void create(){
        p = new T;
    }
};

それが駄目ならboost::remove_pointer<T>

>>49
mainだけはintを返すように宣言してあり、なおかつreturnがなければ
return 0;が行われるという扱いがなされるから問題ない。