Probleme bezüglich const declltype (x) &

9

Betrachten Sie den folgenden Code:

%Vor%

Es kompiliert auf clang 3.5, während GCC 4.9 den folgenden Fehler gibt:

error: 'const' qualifiers cannot be applied to 'const int&'

Welcher entspricht dem Standard? Meine Vermutung ist, dass GCC standardkonform ist, genauso wie Sie int& const b = a; nicht tun können.

    
Lingxi 09.04.2015, 14:10
quelle

1 Antwort

3

Ich glaube, der Code ist gültig und die beiden Typen sind gleich.

[dcl.ref] / 1 sagt:

  

Cv-qualifizierte Referenzen sind schlecht formuliert, außer wenn die cv-Qualifikationsmerkmale durch die Verwendung eines typedef-name (7.1.3, 14.1) oder decltype-specifier (7.1.6.2), in diesem Fall werden die cv-Qualifikationsmerkmale ignoriert.

Da Sie den ersten const durch einen decltype-specifier einführen, wird dieser ignoriert und Ihr erster Typ entspricht decltype(b)& .

Jetzt sagt [dcl.ref] / 6:

  

Wenn ein typedef-name (7.1.3, 14.1) oder ein decltype-specifier (7.1.6.2) einen Typ TR bezeichnet, auf den Bezug genommen wird Der Typ T , ein Versuch, den Typ "lvalue reference to cv TR " zu erstellen, erzeugt den Typ "lvalue reference to T " [...]

Ihr declltype-specifier bezeichnet den Typ "reference to const int " und Sie versuchen, eine lvalue-Referenz zu erstellen, sodass Sie einen lvalue-Verweis auf const int erhalten.

    
Kerrek SB 09.04.2015, 14:22
quelle