2016-04-15 7 views
8

Il semplice codice seguente produce un errore nella newest Visual Studio compiler (MSVC 2015 Update 2):C++ più versioni di un default funzioni membro speciali - Errore in MSVC 2015

struct Foo 
{ 
    template<typename ... Args, typename = std::enable_if_t<sizeof...(Args) != 0> > 
    Foo(Args ...) {} 
    Foo() = default; // error 

    //Foo() {}  //this works! 
}; 

Il messaggio di errore è

errore C2580: 'Foo Foo :: (void)': più versioni di un default funzioni membro speciali non sono ammessi

gcc accetta i t senza problemi.

Questo mi sembra un errore ovvio (nel senso che non è supportato dallo standard). Qualche altra opinione?

+0

Solo un po 'in relazione: io sono così indifferente con UPD2 di VS2015 è quasi ridicolo, se non fosse per tutte le cose che hanno rotto @ lavoro come risultato di quella pila fumante. Correlato: clang non mangia questo problema pure. – WhozCraig

+1

Immagino che questo sia dovuto alla mancanza di ricerca in due fasi? Oh, chi sto prendendo in giro non ne ho idea. Ho smesso di seguire alcuni sviluppi nella pila fumante _real_ (cioè C++) qualche tempo fa. –

+1

Sembra un insetto per me. Nel caso in cui siate interessati a una soluzione alternativa, potreste renderlo 'template Foo (Arg, Args ...);' Questo è forse un modo più semplice per assicurarsi che il costruttore di template prenda almeno un argomento. –

risposta

4

Questo è un bug in VS 2015 Update 2. Abbiamo già corretto il bug (202164, anche se si tratta di un numero di bug interno.) Questo codice dovrebbe funzionare nei build di Update 3.

+1

Se sei interessato a verificare da solo, noi (il team del compilatore MS C++) creiamo il compilatore interno su http://webcompiler.cloudapp.net/ in modo che le persone possano testare cose del genere nel browser. – Rastaban

+1

Sareste in grado di dare qualche informazione in più sul bug? In realtà, qual è il bug? In questo modo, i visitatori di questa pagina con un problema simile ma marginalmente diverso sapranno se la correzione del bug lo ordina anche per _them_. –

Problemi correlati