2014-10-04 11 views
5

Pracowałem ostatnio nad kodem i natknąłem się na coś niezwykłego w GCC i Clang. Użycie brace-init wyzwala błąd kompilacji w gcc, podczas gdy działa bezpośrednia inicjalizacja, taka jak &b = a. Poniższy kod jest bardzo prosty przykład tego zachowania, których spotkałem i zastanawiałem się, dlaczego nie GCC skompilować kod, ponieważ żaden z shared_ptr bierze initializer_list i a jest sprawdzonym lwartościUżywanie brace-init do zainicjowania odniesienia do 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 kompiluje to jednak GCC 4.8 nie.

+0

nie można odtworzyć na gcc 4.9. Prawdopodobnie został ustawiony między wersjami. –

+0

Może być wadą inicjalizacji listy. Porównaj N3337 z N3485. Spróbuję znaleźć raport o usterce. – dyp

+3

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

Odpowiedz

Powiązane problemy