2015-08-12 15 views
5

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?

+1

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

+0

Tương tự cho VS2017: https://developercommunity.visualstudio.com/content/problem/209671/wrong-warning-c4552-with-decltypeauto.html –

Trả lời

1

Như đã nêu trong chính Microsoft here, đó có thể là "lỗi". Hãy thử với:

decltype(auto) f(T param) 
{ 
    return (param + 1); 
} 

Hoặc chỉ chặn cuộc chiến này vì Microsoft có thể sẽ không khắc phục do lỗi "sai" của họ.

+2

"là đầu biểu thức" - đó không phải là đầu biểu thức, đó là bên trong một trả lại – Csq

+0

Điều này không liên quan đến câu hỏi. Việc đưa ra một cảnh báo trên câu lệnh ** biểu thức ** như 'i + j;' là hoàn toàn lành mạnh. Đây là hành vi mong đợi và không cần sửa chữa. Câu hỏi đặt ra là hỏi về câu lệnh 'return' chứa một biểu thức. Tuy nhiên, giải pháp được đề xuất của bạn cũng sẽ áp dụng cho câu hỏi gốc. – IInspectable

2

Như đã chỉ ra trong Csq's answer đã, hành vi quan sát có pending Microsoft Connect report. Vấn đề vẫn chưa được đánh giá.

Để làm việc xung quanh vấn đề 1), bạn có thể bao gồm dấu ngoặc xung quanh khái niệm:

template < typename T > 
decltype(auto) f(T param) 
{ 
    return (param + 1); 
} 


1) đã kích hoạt sử dụng Visual Studio 2015 Community Edition

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