MSVC不一致C293"无法专门化功能模板"

时间:2017-02-14 20:58:40

标签: c++ c++11

了解std::bindstd::thread,我注意到这一点"不一致"错误行为https://godbolt.org/g/5t5uOu

class Widget{
};

void start_thread1(int &param){
}

void start_thread2(std::vector<int> &param){
}

void start_thread3(Widget &w){
}

int main(){
    int int_data = 3;
    std::vector<int> vec_data;
    Widget widget_data;
    std::thread t(start_thread1, int_data); // MSVC Error
    //std::thread t(start_thread2, vec_data); //No MSVC Error
    //std::thread t(start_thread3, widget_data); //No MSVC Error
    t.join();
}

GCC和Clang对这三种情况都给出了错误 如果我尝试

std::bind t(start_thread1,int_data); //and the other two

代码编译得很好 我知道您应该使用std::ref来获取reference_wrapper并按值传递它,但我不明白为什么代码在一个案例中编译而不在另一个案例中编译。有人可以解释为什么它使用bind而不是线程编译好,以及它为什么不用start_thread1编译?

0 个答案:

没有答案