これも1ヶ月以上前の話
C++ の STL に inner_product というアルゴリズムがある。その名のとおりコンテナ同士の内積が計算できる。で、あるライブラリで、ちょっとややこしい要素同士の演算をやって総和を求めたかった。 STL の教科書を見ると、関数オブジェクトを使えと書いてある。
で、やってみるとエラーになる……、という話。要するに g++ が悪いっぽい
教科書的には、関数オブジェクトはこんな形。Σ(1/(ai ・bi))なる計算だね。
span class="coMULTI">/*!< * S1 is used to calculate 1 / (Error[i] * Error[i]) */
これを喰わすとこんなエラーになる。
error: ISO C++ forbids declaration of 'result_type' with no type
いや、 result_type は基底クラスの binary_function で定義されてんだが。ってかそのために継承してんのに、死ねよ g++ 。と。
どうしても名前空間の継承ができないっぽいので、正解は以下の行をクラスブロックの中に書く(7行目あたりに割込む)。
g++-4.3 ではこれが必要だった。そのうち不要になるんだろうか
参考: http://www.tech-archive.net/Archive/VC/microsoft.public.vc.stl/2006-03/msg00093.html