Ich arbeitete vor kurzem an einem Code und ich stolperte über etwas ungewöhnliches in GCC und Clang. Die Verwendung von brace-init löst einen Kompilierungsfehler in gcc aus, während eine direkte Initialisierung wie &b = a
funktioniert. Der folgende Code ist ein sehr einfaches Beispiel für dieses Verhalten, das ich gestoßen und ich habe mich gefragt, warum GCC nicht den Code kompilieren, da keiner von shared_ptr eine initializer_list nimmt und a
ist ein L-WertMit Hilfe von brace-init initialisiere ich einen Verweis auf 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 kompiliert diese aber GCC 4.8 nicht.
nicht für gcc 4.9 wiedergeben kann. Wahrscheinlich zwischen den Versionen behoben. –
Kann ein Fehler bei der Listeninitialisierung sein. Vergleichen Sie N3337 mit N3485. Ich werde versuchen, den Fehlerbericht zu finden. – dyp
Hier ist es: http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html # 1288 – dyp