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)
Bạn đang sử dụng phiên bản VS nào? – user657267
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. –
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. –