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?
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
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. –
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. –