2014-10-04 4 views
5

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.

+0

nicht für gcc 4.9 wiedergeben kann. Wahrscheinlich zwischen den Versionen behoben. –

+0

Kann ein Fehler bei der Listeninitialisierung sein. Vergleichen Sie N3337 mit N3485. Ich werde versuchen, den Fehlerbericht zu finden. – dyp

+3

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

Antwort

Verwandte Themen