Я только что наткнулся на эту маленькую ошибку с msvc. Это похоже на проблему с анализом, но я не уверен.
Следующее дает мне Синтаксическая ошибка C2143: отсутствует ‘;’ до’}’
#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 варианта компилируются просто отлично.
это
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{};
}
(Извините за стену глупого кода.)
Я пропускаю какое-то тайное правило или это ошибка компилятора?
Visual Studio 2015 (v140) Express Edition для настольных компьютеров
скомпилирован как x64 в режиме отладки и выпуска
все параметры компилятора по умолчанию (за исключением уровня предупреждения с W4)
Это похоже на ошибку компилятора для меня. Я могу воспроизвести вашу ошибку на rextester.com, но на webcompiler.cloudapp.net код компилируется нормально (версия компилятора Visual C ++ существует 19.10.24807.0 (x86)).
Также оба последних НКУ а также лязг скомпилируйте код.
Сам синтаксис совершенно корректен.
Других решений пока нет …