在C++ 11中,你可以将ref'ed基类传递给线程的构造函数并获得多态行为吗?

scr*_*nut 8 c++ multithreading ref c++11

我观察到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;
}
Run Code Online (Sandbox Code Playgroud)

scr*_*nut 2

我在这里提交了针对 Visual Studio 11 Beta 的错误。还没有状态。当我收到它时,将编辑这篇文章的状态。

编辑:根据错误报告中的更新,在 VS 2015 RTM 中修复。