我观察到Visual Studio 11 Beta中的新库与使用thread()和ref()的Boost之间的行为存在差异。我想知道谁是对的。如果标准偏离Boost的原始实现,则可能是两者。 (但我不打算破译标准......)
我会尝试使用MinGW ... Alas,AFAIK,< thread>不适用于MinGW。
所以,第一个问题是,gcc和Clang是否表现出相同的编译失败?如果他们不这样做,我将提交一个针对VS的错误。第二个问题可能是,如果编译失败是正确的,那么我的工作方式是什么来获得Boost给我的东西(没有继续使用Boost)?
我想我确实有第三个问题......我开始做什么甚至犹豫不决?
class base
{
public:
virtual void operator()() = 0;
};
class derived : public base
{
public:
virtual void operator()()
{
cout << "derived" << endl;
}
};
int main()
{
base *b = new derived;
std::thread t(std::ref(*b)); // Nasty compilation errors.
boost::thread t(boost::ref(*b)); // Works fine.
t.join();
return 0;
}
答案 0 :(得分:2)
我提交了针对Visual Studio 11 Beta here的错误。还没有状态。当我得到它时,我会用状态编辑这篇文章。
编辑:已在VS 2015 RTM中修复,根据错误报告中的更新。