2016-12-21 19 views
5

Tôi vừa gặp phải lỗi nhỏ này với msvc. Nó trông giống như một vấn đề phân tích cú pháp với tôi nhưng tôi không chắc chắn.
Thông tin sau cung cấp cho tôi Lỗi cú pháp C2143: thiếu ';' trước '}'Lỗi trình biên dịch lạ

#include <vector> 

struct X { }; 

X f(const std::vector<int> v) 
{ 
    for (auto i : v) 
    if (true) 
     return X{};  // <-- 

    return X{}; 
} 

int main() 
{ 
    const auto x = f(std::vector<int>{}); 
} 

4 biến thể tiếp theo chỉ biên dịch tốt.
này

X f(const std::vector<int> v) 
{ 
    for (auto i : v) 
    if (true) 
     return X();  // <-- 

    return X{}; 
} 

và điều này

X f(const std::vector<int> v) 
{ 
    for (auto i : v) 
    if (true) {  // <-- 
     return X{};  // <-- 
    }     // <-- 
    return X{}; 
} 

và điều này

X f(const std::vector<int> v) 
{ 
    for (auto i : v) { // <-- 
    if (true) 
     return X{};  // <-- 
    }     // <-- 
    return X{}; 
} 

và điều này

X f(const std::vector<int> v) 
{ 
    //for (auto i : v) // <-- 
    if (true) 
     return X{};  // <-- 

    return X{}; 
} 

(Xin lỗi vì bức tường mã ngu ngốc.)
Tôi có thiếu một số quy tắc phức tạp hoặc đây có phải là lỗi trình biên dịch không?

Visual Studio 2015 (v140) Express Edition cho Desktop
biên soạn như x64 trong cả hai gỡ lỗi và phát hành chế độ
tất cả các tùy chọn trình biên dịch để giá trị mặc định của họ (trừ mức cảnh báo đụng đến W4)

+1

Bạn đang sử dụng phiên bản VS nào? – user657267

+0

Bạn đã bật C++ 11 trong lệnh biên dịch chưa? Có lẽ trình biên dịch của bạn đang biên dịch cho C++ 03. –

+1

Nó không thất bại trong gcc (với -std = C++ 11 tùy chọn, tất nhiên). Vì vậy, nó phải là một lỗi trình biên dịch. –

Trả lời

3

Nó trông giống như một lỗi trình biên dịch cho tôi. Tôi có thể tạo lại lỗi của bạn trên rextester.com, nhưng trên webcompiler.cloudapp.net mã biên dịch tốt (phiên bản trình biên dịch Visual C++ có 19.10.24807.0 (x86)).

Ngoài ra cả hai mới nhất gccclang biên dịch mã.

Cú pháp chính nó là hoàn toàn hợp lệ.

+0

Cảm ơn bạn, Edgar. Tốt để biết vấn đề không có trong mã. – Garp

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