Stavo lavorando su un codice di recente e mi sono imbattuto in qualcosa di insolito in GCC e Clang. L'utilizzo di brace-init attiva un errore di compilazione in gcc, mentre un'inizializzazione diretta come &b = a
funziona. Il codice che segue è un esempio molto semplice di quel comportamento che ho incontrato e mi chiedevo perché GCC non compila il codice, dal momento che nessuno di shared_ptr prende un initializer_list e a
è un lvalueUtilizzo di brace-init per inizializzare un riferimento a std :: shared_ptr
#include <iostream>
#include <memory>
int main()
{
std::shared_ptr<int> a { nullptr }, &b { a };
a = std::make_shared<int> (1e3);
std::cout << (b ? *b : 0) << std::endl;
return 0;
}
Clang 3.4 compila questo, ma GCC 4.8 no.
non può riprodurre per gcc 4.9. Probabilmente risolto tra le versioni. –
Potrebbe essere un difetto nell'inizializzazione dell'elenco. Confronta N3337 vs N3485. Cercherò di trovare il rapporto sui difetti. – dyp
Eccolo: http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1288 – dyp