ローカルファンクタはgccではfor_eachに指定出来ない。
#include <iostream> #include <vector> #include <algorithm> /* // 関数内じゃなければ、gccでもOK(当たり前だけど)。 struct Proc { void operator () (int val) { std::cout << val << std::endl; } }; */ int main() { // ローカルファンクタクラス struct Proc { void operator () (int val) { std::cout << val << std::endl; } }; std::vector<int> nums; nums.push_back(0); nums.push_back(1); nums.push_back(2); std::for_each(nums.begin(), nums.end(), Proc()); // ↑の様にローカルファンクタクラスをgccでfor_eachに指定するとコンパイルエラー。VC++ではOK。 return 0; }
ファンクタをあまり関数から離れたところに書きたくないので、
VC++の方がありがたい感じ。でもgccのが(仕様的に)正しいんだろうな。
Win/Linux共用鯖プログラムなんか書いてると、うっかりこういうコードを
書いてしまって、意味不明なビルドエラーに悩まされたり(もう色々慣れたけど)。