std :: thread VS2015中的错误C2893

时间:2015-08-06 07:34:57

标签: c++ templates

// C2893.cpp
// OK in VS2013, Error in VS2015
// compile with: /EHsc
#include <thread>
//
template <typename T_app>
struct instance
{
    void load() {;}
};
//
template <typename T_app>
struct scene
{
    T_app *p_app;
    void thread_load() {
        std::thread(&instance<T_app>::load, std::ref(p_app->app_inst) ).detach();
    }
};
//
struct app
{
    instance<app> app_inst;
    scene<app> app_scene;
};
//
int main() {
    app my_app;
    my_app.app_scene.p_app = &my_app;
    // OK in VS2013, Error in VS2015
    my_app.app_scene.thread_load();
    return 0;
}

您好,我刚刚更新到VS2015,VS2013中的代码没问题,如何纠正thread_load()的错误?我在Visual C ++ 2015中阅读了Breaking Changes,它必须是非类型模板参数问题,但我找不到正确的方法。感谢。

1 个答案:

答案 0 :(得分:1)

错误在这里startStop。 在此上下文中,std::ref(p_app->app_inst)的第二个参数应为std::thread,但instance*只是p_app->app_inst类。

所以答案是instance没有任何lambda函数。