下面的例子演示了我在VC中遇到的問題++ 2010:找不到從lambda調用函數時的查找規則是什麼?
如果我有資格調用foo的標識::Foo::foo(1);
那麼這個例子
class Foo
{
template<class T>
static T foo(T t) { return t; }
public:
void test()
{
auto lambda = []() { return foo(1); }; // call to Foo::foo<int>
lambda();
}
};
VC++產生:錯誤C3861:'foo'
編譯時出現警告: 警告C4573:使用'Foo::foo'
要求編譯器捕獲'this'
,但當前的默認捕獲模式不允許它
標準對這種情況說了什麼?是否應該找到不合格的名字?合格的名稱是否需要捕獲this
?
嗯,這很奇怪。它是靜態的,所以它不需要'this'。我懷疑這是編譯器錯誤,沒有發現它是編譯器認爲它需要'this'來使用它的副作用。 –
這也發生在g ++上,所以它看起來不像一個bug。如果你把它改成[&]()而不是[](),那麼這個編譯好,但這是因爲它通過引用。 – DrYap
說了[另一個線程](http://stackoverflow.com/questions/4940259/c0x-lambdas-require-capturing-this-to-call-static-member-function)說這是一個錯誤。 – DrYap