>>438
クラス B と C の間に直接の継承関係がないから
条件式の結果を何の型にすればいいのか判断できないんじゃないかな。
共通の基底クラスにしてくれればいいもんだけど、
そうするようにはなってないんだろうね。

というわけで、どちらか(または両方)明示的にキャストすれば大丈夫だね。

A* p1 = i > 1 ? static_cast<A*>(new B()) : new C();