Tôi nghĩ rằng tôi đã gặp phải một lỗi trong Visual C++ 2015 nhưng tôi muốn chắc chắn. Hãy xem xét đoạn mã này: Visual C++ 2015 cho cảnh báo C4552 khi sử dụng decltype (tự động)
template < typename T >
decltype(auto) f(T param)
{
return param + 1;
}
int main()
{
auto i = f(10);
return 0;
}
Visual C++ 2015 cung cấp cho cảnh báo này trên báo cáo kết quả lợi nhuận:
cảnh báo C4552: '+': nhà điều hành không có hiệu lực thi hành; nhà điều hành dự kiến có tác dụng phụ
mặc dù có vẻ như nó không ảnh hưởng đến mã kết quả. Đây có phải là lỗi trình biên dịch không?
tôi sẽ phải nói vậy. Tôi có thể tái tạo nó trên VS2015 của tôi nhưng tôi nhận được kết quả chính xác. [g ++ sẽ biên dịch mã mà không có bất kỳ cảnh báo nào] (http://coliru.stacked-crooked.com/a/c6c4085223ae9e64). VS cũng sẽ đưa ra cảnh báo nếu bạn thay đổi trở lại thành '1 + param' – NathanOliver
Tương tự cho VS2017: https://developercommunity.visualstudio.com/content/problem/209671/wrong-warning-c4552-with-decltypeauto.html –