Verwendung der Struktur-ID zur Kennzeichnung von POD-Typen und C-Strukturen

8

Betrachten Sie den folgenden Code:

%Vor%

Das obige Codeteil wird in Clangv3.5 und GCCv4.9 .

Es kann jedoch nicht in VC ++ 2013 kompiliert werden.

Das Entfernen des struct -Kennzeichens (siehe unten) vom Rückgabetyp löst das Problem:

%Vor%

Q1:

Ist das ein Visual Studio Bug?

Q2:

Dieses Problem ist aufgetreten, weil in meiner Code-Basis die Foo struct in einer .h.c Datei liegt (dh, ist ein C struct ) und um C / POD struct s zu signalisieren In meinem Code verwende ich die Kennung struct . Ist das eine schlechte Idee (d. H. In C ++ - Code sollte ich vermeiden, struct identifier auf diese Weise zu verwenden)?

    
101010 05.11.2014, 10:52
quelle

1 Antwort

7

Der Hauptpunkt eines erarbeiteten Typenbezeichners besteht darin, dass Sie auf einen Namen verweisen können, der ausgeblendet wurde, aus dem Entwurf C ++ - Standard Abschnitt 3.4.4 Verfeinerte Typspezifizierer :

  

Ein elaborierter Typ-Spezifizierer (7.1.6.3) kann verwendet werden, um auf a Bezug zu nehmen   zuvor deklarierter Klassenname oder Enumname, obwohl der Name bereits vorhanden ist   wurde durch eine Nicht-Typ-Deklaration (3.3.10) ausgeblendet.

und für den Fall, dass Foo ausgeblendet ist, müssten Sie einen Typspezifizierer verwenden :

%Vor%

Ich sehe nichts in 7.1.6.3 Ausgeklügelte Typbezeichner oder 14 Vorlagen , die diese Verwendung verhindern würden. Tatsächlich sieht es aus wie in der Beschreibung von CS2989 Visual Studio wird verwirrt und denkt, dass Sie versuchen eine Nicht-Template-Klasse als Template-Klasse neu zu definieren.

Das sieht also wie ein Fehler für mich aus, also würde ich einen Fehlerbericht einreichen.

Aktualisieren

Abgelegt unter Fehlerbericht .

    
Shafik Yaghmour 05.11.2014, 13:25
quelle