考虑下面的代码:
#include <memory>
#include <future>
using namespace std;
template <typename T, typename Work>
void Test2(future<T> f, Work w)
{
async([](future<T> && f, Work w)
{}, move(f), move(w));
}
int main()
{
future<int> x = std::async([]()->int{
std::this_thread::sleep_for(std::chrono::microseconds(200));
return 10;
});
Test2(std::move(x), [](int x){});
return 0;
}
上述失败并出现以下编译器错误:
错误 1 错误 C2664: 'void Test2::::operator ()(std::future<_Ty> &&,Work) const' : 无法将参数 1 从 'std::future<_Ty>' 转换为 'std::future <_Ty> &&' c:\program files (x86)\microsoft visual studio 11.0\vc\include\xrefwrap 98 1 ConsoleApplication6
GCC 4.7.2 编译得很好 http://ideone.com/KhMiV6
在我继续在 Microsoft Connect 上报告之前:
1)这是VC11的一个错误还是这实际上是标准行为?
2)有没有人知道这个的解决方法?
编辑:我已经在Microsoft Connect上报告了它。为了更快地解决问题,我们鼓励您对其进行投票。