ラムダ式のスコープ

namespace lib
{
	namespace detail
	{
		struct A
		{
			int a_;
		};
	}
	using detail::A;
}

int main()
{
	using namespace lib;
	
	//error
	auto f0 = [](int) { A a; };
	while(true) { f0(1); }

	//error
	auto f1 = [](int i = 0) { A a; };
	while(true) { f1(); }

	//pass
	auto f2 = []() { A a; };
	while(true) { f2(); }
}

上のソースはgcc4.5.0(mingw)なら全部通るのに、visual studio2010だとf0,f1は通らない。

ラムダ式なんて、規格では、ラムダ式の宣言とブロックがあるだけみたいに書いて有ったから、ブロック式はそのまま外側のスコープでusingされたものが使えても良さそう。。。ちゃんと規格が読めないので何とも言えない。

これは、、、vc10.0のバグ・・・???