2012-03-29 10 views
8

Tôi đã quan sát thấy sự khác biệt về hành vi giữa thư viện mới trong Visual Studio 11 Beta và Boost với chuỗi() và ref(). Tôi tự hỏi ai là đúng. Nó có thể là cả hai nếu tiêu chuẩn lệch từ thực hiện ban đầu của Boost. (Nhưng tôi không định giải mã chuẩn ...)Trong C++ 11, bạn có thể vượt qua một lớp cơ sở được ref'ed đến constructor của thread và nhận được hành vi đa hình?

Tôi đã thử với MinGW ... Alas, AFAIK, < chủ đề > không hoạt động đối với MinGW.

Vì vậy, câu hỏi đầu tiên là, gcc và Clang có thể hiển thị cùng một lỗi biên dịch không? Nếu không, tôi sẽ gửi một lỗi chống lại VS. Câu hỏi thứ hai có thể là, nếu thất bại biên dịch đó là chính xác, cách giải quyết của tôi là gì để có được những gì Boost đã cho tôi (thiếu tiếp tục sử dụng Boost)?

Và tôi cho rằng tôi có câu hỏi thứ ba ... Tôi đang làm gì để bắt đầu?

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; 
} 
+3

clang -stdlib = libC++ -std = C++ 11 biên dịch và in ra "có nguồn gốc". Lỗi bạn đang thấy là gì? –

+0

g ++ -std = C++ 0x -lpthread cũng biên dịch và eventhough tôi không thấy bất kỳ sử dụng trực tiếp cho các chủ đề đa hình, không có gì xấu về nó. – stefaanv

+0

Cảm ơn sự giúp đỡ của bạn, các bạn. Tôi sẽ gửi một lỗi trên VS và, hy vọng, họ sẽ xác nhận. – screwnut

Trả lời

2

Tôi đã gửi lỗi chống lại Visual Studio 11 Beta here. Chưa có trạng thái. Sẽ chỉnh sửa bài đăng này với trạng thái khi tôi nhận được nó.

Chỉnh sửa: Đã sửa trong RTM VS 2015, theo bản cập nhật trong báo cáo lỗi.

Các vấn đề liên quan