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.
nie można odtworzyć na gcc 4.9. Prawdopodobnie został ustawiony między wersjami. –
Może być wadą inicjalizacji listy. Porównaj N3337 z N3485. Spróbuję znaleźć raport o usterce. – dyp
Tutaj jest: http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1288 – dyp