Chương trình này được biên soạn bởi kêu vang:kêu vang: initialising một tài liệu tham khảo khóa từ một mutex
#include <mutex>
int main() {
std::mutex mtx;
const std::lock_guard<std::mutex>& lock(mtx);
return 0;
}
trình biên dịch lớn khác từ chối nó (Tôi đã thử gcc, MSVC, và icc). Đây là thông báo lỗi từ gcc:
error: invalid initialization of reference of type ‘const
std::lock_guard<std::mutex>&’ from expression of type ‘std::mutex’
Các lỗi khác tương tự.
Nhang phải hay sai? Điều này có thể được sao chép với một ví dụ đơn giản hơn không liên quan đến các lớp thư viện? Tôi đã thử nhưng vô ích.
Sửa này có vẻ là sinh sản tối thiểu:
struct A {};
struct X
{
explicit X(A&) {};
};
int main()
{
A a;
const X& x(a);
}
Điều thú vị là, một int
ở vị trí của A
không kích hoạt các thông báo lỗi trong kêu vang (đó là lý do tại sao tôi không thể tái sản xuất này ban đầu).
Vì vậy, ... là điều này chỉ là một lỗi kêu vang? Có vẻ như vậy cho đôi mắt của tôi ... –
@ n.m .: Tôi không đủ điều kiện để thực hiện * cuộc gọi cụ thể đó. Ở trên chỉ đơn thuần là cách tôi sẽ giải thích thông báo lỗi cho bản thân mình; Tôi sẽ để lại phán quyết cho chính quyền cao hơn ... ;-) – DevSolar