> そもそも何故operator<<(CHoge*)がないのにar << &hoge;が通ったのかがわからないのですが…
operator << ( CArchive&, CObject*& ); が存在するゆえ。

型がCHogeであるとわかってるオブジェクトなら、 << とか >> を使わないで
直に CHoge::Serialize を呼んだ方が良いなり。

from MSDN
> つまり、シリアル化可能クラスでメンバとして埋め込みオブジェクトを
> 定義している場合は、CArchive 演算子 <<および>> を使えないので、
> 関数Serialize を呼び出す必要があります。また、シリアル化可能
> クラスのメンバとして CObject (またはその派生オブジェクト) への
> ポインタが定義されていても、そのオブジェクトが自身のコンストラクタに
> よって構築されるときは、Serialize を呼び出す必要があります。