使用std :: ref的正确方法是什么?我尝试以下代码在VS2010,它不编译:
#include <vector> #include <algorithm> #include <iostream> #include <functional> using namespace std; struct IsEven { bool operator()(int n) { if(n % 2 == 0) { evens.push_back(n); return false; } return true; } vector<int> evens; }; int main(int argc,char **argv) { vector<int> v; for(int i = 0; i < 10; ++i) { v.push_back(i); } IsEven f; vector<int>::iterator newEnd = remove_if(v.begin(),v.end(),std::ref(f)); return 0; }
错误:
c:\program files (x86)\microsoft visual studio
10.0\vc\include\xxresult(28): error C2903: ‘result’ : symbol is neither a class template nor a function templatec:\program files (x86)\microsoft visual studio
10.0\vc\include\xxresult(28): error C2143: Syntax error : missing ‘;’ before ‘<‘
再加一些…
解决方法
在Visual C 10.0执行std :: ref中有一个错误或一组错误.
据报导,Visual C 11已被修复;看我的earlier question about it.
微软的STL回答说:“我们已经解决了这个问题,修复程序将在VC11 RTM中提供(但是,修复程序没有进入VC11 Beta版本).”