以下代码使用VC2013中的Debug \ Win32和Debug \ x64 设置编译,但是当我使用Debug \ x64 时,我得到以下 IntelliSense错误:
IntelliSense: no operator "=" matches these operands
operand types are: std::future<bar<int>> = std::future<bar<int> (&)(bar<int> v)>
Error指的是Header.cpp中的这个函数:
bar<int> test::call(bar<int> v)
{
std::future<bar<int>> ret;
ret = std::async(std::launch::async, &test::exec, this, v);
return ret.get();
}
为什么std :: async在使用x64时会返回不同的内容?
返回值win32:
std::future<bar<int>>
返回值x64:
std::future<bar<int> (&)(bar<int>
我如何为x64修复此问题?
我的代码:
Header.h
#pragma once
#include <future>
#include <iostream>
using namespace std;
template <typename T>
class bar
{
public:
bar()
{
state = 9;
}
void dec(){ state--; }
T show()
{
return state;
}
private:
T state;
};
class test{
public:
test(int a);
public:
bar<int> call(bar<int> v);
private:
bar<int> exec(bar<int> v);
private:
int value;
};
Header.cpp
#include "Header.h"
using namespace std;
test::test(int a)
{
value = a;
}
bar<int> test::call(bar<int> v)
{
std::future<bar<int>> ret;
ret = std::async(std::launch::async, &test::exec, this, v);
return ret.get();
}
bar<int> test::exec(bar<int> v)
{
v.dec();
v.dec();
return v;
}
Source.cpp
#include <future>
#include <iostream>
#include "Header.h"
using namespace std;
int main()
{
test object(4);
bar<int> foo;
bar<int> other = object.call(foo);
std::cout << other.show();
getchar();
}
修改 我不想使用auto,因为auto在其他情况下不起作用(例如创建一个期货矢量然后推回期货)
此错误不 编译器错误,代码编译并执行flawlesly ==&gt;我无法发布编译器错误,因为没有编译器错误。我只是想摆脱VC智能感知错误
使用std :: move()无法解决问题,我仍然会收到IntelliSense错误: (该代码使用和不使用std :: move完美地编译和执行)
IntelliSense: no operator "=" matches these operands
operand types are: std::future<bar<int>> = std::future<bar<int> (&)(bar<int> v)>