>>343 スレ違いやね。このスレじゃなくて、C++相談室で取り扱う話題だ。 まあ姉妹スレのよしみで答えてやるけど、掛け算をやりたいんなら、 その行列クラス用のoperator*()をオーバーロードするのが定石。 誰からも認められる、operator*()の正当なオーバーロードのやり方は、 Effective C++ と More Effective C++ を買って読めば分かる。買え。
gccではコンパイルできたのでVC特有の動作かと思ったんですが、 >>431 をみて納得しました。たしかにコンパイルできませんね。 あたりまえですが、gccでもこれはダメでした。 Base* p = (b)? new A : new B; がgccでコンパイルできるのはgccが三項演算子の解釈を拡張しているんでしょう。 みなさんありがとうございました。
>>431 > 規格じゃ3項演算子の3項目から2項目への変換があるか、 > または同じ型でなければコンパイルできないはず。 何でそう言う制約が必要なんだろ ? A *p = (b) ? new A : new B; がダメなのは、b = FALSE の時に A *p = new B; となるからダメなのはわかる けど Base *p = b ? new A : new B; なら、Base *p = new A; と Base *p = new B; なんだから別に問題ないと思う けど。不思議じゃ...。