很久以前,我注意到在Visual C++ 10 ADL失敗時,至少有一個參數是lambda。有lambda參數時ADL失敗?
std::vector<float> vec;
for_each(begin(vec), end(vec), [](float) {});
以上不能在VC++ 10和11(beta)上進行編譯(開始和結束都是通過ADL發現的)。當我將lambda函數轉換爲常規的自由函數時,事情就像預期的那樣工作。
我在Herb Sutters博客上曾經問過一次,也看過msdn connect上的一些帖子,通常的答案是:這是一個錯誤,我們還沒有實現lambda的最新標準,但當時 - 相當可以理解的。事情還沒有完成。在MS連接也出現了令人不安的評論認爲,這不會對下一個版本,即VC 11.
我的問題是,這段代碼預期 C++的11個標準下工作來解決?我不能完全弄清楚。當我使用lambda表達式時,是否真的必須將我的for_each和其他算法加上std ::前綴? 我懷疑這種行爲在vC++ 11發佈後不會改變。
什麼免費功能做你用? – 2012-03-28 05:46:24
像void一樣簡單f(float){}甚至可以工作。或者在函數調用之外聲明lambda:auto f = [](float){}; – 2012-03-28 13:59:34