複素数と整数の演算は定義されていません。例えば、

complex<double> z(1.0,1.0);
cout<< 2 * z << endl;

はエラーになります。double型との演算は定義されているため

cout<< 2.0 * z <<endl;

としなければなりません。しかし、2*zとかz/3のような演算もやりたいです。

整数と複素数の演算をオーバーロードすればいいのですが、暗黙の型変換
演算子(これってクラスの時しか使えない?)やtrait(typedefテンプレート)
を使って対応できないものでしょうか?