Funktions-Template modifiziert den Parameter, der mit dem obersten const: clang bug deklariert wurde?

8

Der folgende Code wird korrekt in clang 3.8.1-1 auf ArchLinux kompiliert.

Ist das clang Bug?

gcc gibt korrekte Warnung / Fehler aus.

%Vor%

Hier, wie ich kompiliere:

%Vor%

clang und c++14 - dasselbe Ergebnis.

%Vor%

Hier ist gcc-Ausgabe:

%Vor%     
Nick 13.09.2016, 08:43
quelle

1 Antwort

5

Ja, das ist ein Bug beim Klingeln; eingereicht bei Ссылка .

Die Art des Fehlers besteht darin, dass in einer Klassenvorlagen-Memberfunktionsdefinition die Klassenvorlage außerhalb ( [class.mfct] / 1) erscheint und der Typ eines Parameters von der Klassenvorlage abhängt Parameter verwendet clang den Parametertyp der Deklaration und nicht den Parametertyp der Definition, in der sie sich in der obersten cv-Qualifikation unterscheiden. Vereinfachtes Beispiel:

%Vor%

Pro [dcl.fct] / 5 Der Typ von i in der Definition von A<X>::f ist int const ( Verwendung von 'const' für Funktionsparameter ):

  

5 - [...] Nachdem die Liste der Parametertypen erstellt wurde, können alle cv-qualifiers auf oberster Ebene einen Parameter ändern   Typ wird bei der Bildung des Funktionstyps gelöscht. [...]   [ Hinweis: Diese Umwandlung wirkt sich nicht auf die Typen der Parameter aus. [...] - Endnote ]

    
ecatmur 13.09.2016, 11:04
quelle

Tags und Links