配列newでの初期化

大学院のときの研究室の同僚から、コンパイラを変えたら、

error: ISO C++ forbids initialization in array new

というエラーが出たので、助けてくれというのが来た。

エラー箇所は、

//これ。 i,vcs,outputsはint、configはconstなかたまり。
_vc[i] = new VC[_vcs](config, _outputs);

という記述。

配列でnewしたときはデフォルトコンストラクタでないとコールできないみたいっぽいな。えーと、C++の仕様上はどうなっていたっけ・・・と思って調べてみたら、仕様上でもそれは定義さていない。コンパイラ依存の現象ではなかったみたい。

ん?じゃあ、いままでこのプログラムはどのコンパイラに通してたんだ?

追記

もともと使っていたコンパイラgcc-2.95.4。それを gcc-3.4 にしたらこうなったと。gccは3以降、言語の標準仕様への対応が厳密になってきた*1ので、こういうことが発生したと。ちうわけで、正しいC++の記述に直しましょう、というのが今回の結論。

元々のプログラムを書いた人はプログラマな人ではなく、すぐに直す気もないらしい。困ったものだ。

*1:だからboostをgccで使いたくば、3.3以降を使えということ