ローカルファンクタは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共用鯖プログラムなんか書いてると、うっかりこういうコードを
書いてしまって、意味不明なビルドエラーに悩まされたり(もう色々慣れたけど)。