방금 msvc에서이 작은 오류가 발생했습니다. 그것은 나에게 구문 분석 문제처럼 보이지만 확실하지 않습니다.
다음은 나를 C2143 구문 오류 : 준다 ';' before '}'이상한 컴파일러 오류
#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>{});
}
다음 네 가지 변형은 잘 컴파일됩니다.
이
X f(const std::vector<int> v)
{
for (auto i : v)
if (true)
return X(); // <--
return X{};
}
이
X f(const std::vector<int> v)
{
for (auto i : v)
if (true) { // <--
return X{}; // <--
} // <--
return X{};
}
이
X f(const std::vector<int> v)
{
for (auto i : v) { // <--
if (true)
return X{}; // <--
} // <--
return X{};
}
이
X f(const std::vector<int> v)
{
//for (auto i : v) // <--
if (true)
return X{}; // <--
return X{};
}
(바보 코드의 벽에 대 한 죄송합니다.)
일부 난해한 규칙이 없거나 컴파일러 버그입니까?
비주얼 스튜디오 2015 (v140) 익스프레스 에디션은 데스크톱
것은이처럼 보이는
사용중인 VS의 버전은 무엇입니까? – user657267
컴파일 명령에서 C++ 11을 활성화 했습니까? 아마도 컴파일러가 C++ 03 용으로 컴파일되고있을 것입니다. –
gcc에서 실패하지 않습니다 (물론 -std = C++ 11 옵션 포함). 따라서 컴파일러 버그 여야합니다. –