2014-10-04 9 views
5

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.

+0

non può riprodurre per gcc 4.9. Probabilmente risolto tra le versioni. –

+0

Potrebbe essere un difetto nell'inizializzazione dell'elenco. Confronta N3337 vs N3485. Cercherò di trovare il rapporto sui difetti. – dyp

+3

Eccolo: http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1288 – dyp

risposta

Problemi correlati