Implementierung von std :: unique_ptrT [] :: reset in gcc 6

8

Seit GCC 6 in C ++ sieht die Deklaration / Definition einer unique_ptr<T[]>::reset -Methode (nicht diejenige, die nur nullptr_t akzeptiert) folgendermaßen aus:

%Vor%

Dies wurde irgendwann geändert, um zu implementieren N4089 . Nach diesem Dokument:

  

Diese Funktion verhält sich genauso wie das reset-Element des primären Templates, außer dass es dies tut   beteiligt sich nicht an der Überladungsauflösung, es sei denn, beides

     

- U ist der gleiche Typ wie pointer oder

     

- pointer ist derselbe Typ wie element_type* , U ist ein Zeigertyp V* und V(*)[] ist in element_type(*)[] konvertierbar.

Betrachten wir das folgende Beispiel:

%Vor%

Seit GCC Version 6 gibt es einen Fehler und beschwert sich, dass er std::swap nicht mit const char*& und char*& aufrufen kann. reset Methode findet in der Überladungsauflösung statt, da char[] in const char[] konvertierbar ist, aber natürlich erwartet std::swap zwei Referenzen desselben Typs.

Wird dies als richtiges Verhalten angesehen? Wenn ja, warum? Wenn ich char[] implizit in const char[] umwandeln kann, warum sollte das nicht mit unique_ptr möglich sein?

    
user7020241 14.10.2016, 16:46
quelle

1 Antwort

0

Das scheint wirklich ein Fehler in gcc libstdc ++ zu sein. @Barry hat es gemeldet: 77987

    
user7020241 15.10.2016, 06:32
quelle

Tags und Links