2015-10-01 14 views

Trả lời

25

Điều này là do trong trường hợp của bạn trở thành một giá trị. Bạn không thể gán cho một rvalue. Chuyển sang một giá trị trái thay vì:

std::is_assignable<X*&, Y*>::value 
//     ~^~ 
25

std::is_assignable kiểm tra:

Nếu biểu thức std::declval<T>() = std::declval<U>() là tốt được hình thành trong bối cảnh unevaluated

Nhưng bạn không thể gán - một rvalue (đó là những gì declval<X*>() sẽ là) ở tất cả. Bạn cần một vế trái ở phía bên tay trái của sự phân công:

std::is_assignable<X*&, Y*>::value 

Đó sẽ là sự thật. Nếu Clang trở lại đúng, đó chắc chắn là một lỗi Clang.

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