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:
Ist das ein Visual Studio Bug?
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)?
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 :
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 .
Tags und Links c++ c++11 struct c++14 visual-studio-2013