type-alias

___ tag123g ___ g ++ ist das C ++ - Frontend für die GNU Compiler Collection (gcc). ___ tag123c14 ___ C ++ 14 ist der Name des C ++ - Standards, der 2014 genehmigt wurde. Er baut auf dem vorherigen C ++ 11-Standard auf und verbessert die Kernsprache und die Standardbibliothek sowie einige Funktionen. ___ qstnhdr ___ Darf ich einen Membertyp-Alias ​​für einen Typ in einem umgebenden Bereich mit demselben Namen deklarieren? ___ answer41516179 ___

Die Regel, die GCC erzwingen soll, ist in [basic.scope.class]:

  

2) Ein Name N, der in einer Klasse S verwendet wird, muss sich auf dieselbe Deklaration in seinem Kontext beziehen und wenn er im abgeschlossenen Bereich von S neu bewertet wird. Für einen Verstoß gegen diese Regel ist keine Diagnose erforderlich.

Der Standard besagt, dass die Verletzung keine Diagnose erfordert, daher ist es möglich, dass sowohl GCC als auch Clang konform sind, weil (wenn GCC richtig ist) der Code nicht gültig ist, aber der Compiler sie nicht diagnostizieren muss / p>

Der Zweck dieser Regel besteht darin, dass Namen, die in einer Klasse verwendet werden, immer dieselbe Bedeutung haben, und das Neuordnen von Elementen ändert nicht die Art, wie sie interpretiert werden, z. B.

%Vor%

In diesem Beispiel ändert sich der Name %code% und die Reihenfolge der Mitglieder ändert die Größe von %code% . Wenn %code% definiert ist %code% bezieht sich auf den Typ %code% , aber im abgeschlossenen Bereich von %code% bezieht es sich stattdessen auf %code% . Dies verstößt gegen die oben genannte Regel.

In Ihrem Beispiel ändert sich der Name %code% viel weniger gefährlich, da er sich immer noch auf den gleichen Typ bezieht, jedoch ändert er sich von der Deklaration von %code% zur Deklaration von %code% . Die Regel ist so formuliert, dass sie sich auf Erklärungen bezieht, daher denke ich, dass der GCC richtig ist.

    
___ tag123Typalias ___ Ein Typ-Alias ​​ist ein kurzer beschreibender Name für einen Typ, dessen wirklicher Name länger oder weniger beschreibend ist als der Alias. Solche Typ-Mitglieder können helfen, den Code zu verdeutlichen. ___ qstntxt ___

Ich möchte, dass eine Struktur einen Typalias in einen anderen Typ für Metaprogrammierungszwecke enthält:

%Vor%

Dann kann ich Sachen wie %code% in einer Vorlage usw. machen.

Wie ich verstehe, ist dieser Typ-Alias ​​gültig, weil er die Bedeutung des Typs %code% nicht ändert. Clang kompiliert das glücklich.

Der GCC beschwert sich jedoch:

%Vor%

Jetzt bin ich verwirrt, weil ich die Bedeutung von %code% von %code% explizit nicht ändere.

Was ist das richtige Verhalten für C ++ 14? Ich weiß, dass ich das umgehen kann, indem ich die %code% umbenenne, aber ich würde gerne verstehen, ob der Fehler von GCC hier richtig ist.

Anmerkungen:

___ tag123clang ___ clang ist ein C-, C ++ - und Objective-C-Compiler, der Vorverarbeitung, Parsing, Optimierung,        Codegenerierung, Assemblierung und Verknüpfung. Abhängig davon, welche High-Level-Moduseinstellung bestanden wird, Clang        wird angehalten, bevor eine vollständige Verbindung hergestellt wird. Während Clang hoch integriert ist, ist es wichtig zu verstehen        die Phasen der Kompilation, um zu verstehen, wie man sie aufruft. ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___
1
Antwort

In Swift, wie kann man eine Typologie erweitern?

Ich habe eine Typologie: %Vor% Ich möchte es erweitern, indem ich so etwas mache: %Vor% Aber das wirft einen Kompilierungsfehler auf:    Die eingeschränkte Erweiterung muss für den nicht spezialisierten generischen Typ 'Dictionary' mi...
18.11.2015, 03:34
1
Antwort

Verwendung von Scala-Aliasen aus Java-Code

Angenommen, ich habe in scala einen Typalias definiert als %Vor% Es sieht so aus, als könnte ich in Java-Code nicht auf Alias ​​verweisen (es klagt einfach kann kein Symbol finden ): %Vor% Ich habe auch den statischen Import ausprobiert...
02.12.2012, 21:05
2
Antworten

Haskell-Datentyp Aliasnamen

Ich habe ein mathematisches Vector Modul in Haskell geschrieben. Also begann ich mit: %Vor% Fein - damit kann ich jeden beliebigen numerischen Datentyp verwenden. Das Problem ist, dass ich nicht überall Double und Vector Double s...
08.07.2012, 05:00
1
Antwort

Darf ich einen Membertyp-Alias ​​für einen Typ in einem umgebenden Bereich mit demselben Namen deklarieren?

Ich möchte, dass eine Struktur einen Typalias in einen anderen Typ für Metaprogrammierungszwecke enthält: %Vor% Dann kann ich Sachen wie WithNestedTypeAlias::Foo in einer Vorlage usw. machen. Wie ich verstehe, ist dieser Typ-Alias ​​gü...
06.01.2017, 23:24