2016-12-21 45 views
5

Sadece bu küçük hatayı msvc ile çarptı. Bana ayrıştırma problemi gibi görünüyor ama emin değilim.
Aşağıdakiler bana C2143 sözdizimi hatası veriyor: eksik ';'Garip derleyici hatası

#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>{}); 
} 

'}' önce önümüzdeki 4 varyasyonlar olsa gayet güzel derlemek.
Bu

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

    return X{}; 
} 

ve

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

ve

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

ve

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

    return X{}; 
} 

(aptal kod duvar Maalesef.)
Bazı arcane kurallarını kaçırmıyorum veya bu bir derleyici hatası mı?

Visual Studio 2015 (V140) Express Edition Masaüstü
için bir benziyor

+1

Hangi sürüm VS kullanıyorsunuz? – user657267

+0

Derleme komutunuzda C++ 11'i etkinleştirdiniz mi? Belki de derleyiciniz C++ 03 için derleniyor. –

+1

gcc'de başarısız olmaz (elbette -std = C++ 11 seçeneği ile). Yani, derleyici bir hata olmalı. –

cevap

3

(W4 çarptı uyarı seviyesine hariç) varsayılan hem hata ayıklama ve sürüm modunda x64 olarak
tüm derleyici seçenekleri derlenmiş derleyici hata benim için. Hatanızı rextester.com üzerinde yeniden oluşturabilirim, ancak webcompiler.cloudapp.net kodları iyi derler (Visual C++ derleyici sürüm 19.10.24807.0 (x86)). Ayrıca, her ikisi de en son gcc ve clang kodunu derleyin.

Sözdiziminin kendisi mükemmel şekilde geçerlidir.

+0

olmadan bile çoğaldı Teşekkür ederim, Edgar. Sorunu bilmek iyi değil kodunda. – Garp

İlgili konular