爲什麼我不能接受lambda表達式的模板函數?將lambda表達式傳遞給模板函數時的編譯錯誤
經過高低搜索 - 我認真,雖然這將工作,但這個C++代碼;
template <typename F> int proc(const F& lam)
{
return lam();
}
void caller()
{
int i = 42;
int j = proc([&i]()->int{ return i/7; });
}
我得到以下錯誤;
$ g++ x.cc
x.cc: In function ‘void caller()’:
x.cc:11:44: warning: lambda expressions only available with -std=c++0x or -std=gnu++0x [enabled by default]
x.cc:11:46: error: no matching function for call to ‘proc(caller()::<lambda()>)’
x.cc:11:46: note: candidate is:
x.cc:3:27: note: template<class F> int proc(const F&)
我在使用G ++ 4.6.3和4.7.2的Linux
有誰知道我必須做的傳遞lambda表達式作爲參數來接收模板函數? - 我不想使用std :: function - 所以我唯一的選擇是創建一個醜陋的仿函數模式。
更新:試圖聲明參數const F & lam,但沒有成功。 UPDATE2:添加調用編譯器...
你傳遞給編譯器的標誌是什麼? –
無 - 無標誌 - 通過調用編譯器更新問題... – Soren
您必須在g ++ 4.7.2中使用-std = C++ 11或在g ++ 4.6.3中使用-std = C++ 0x。 –