Forward - Deklariert eine Member-Enumeration einer Klassenvorlage

8

Mit C ++ 11's stark typisierten enum s ist es möglich, eine Member-Enumeration einer Klasse wie folgt zu deklarieren:

%Vor%

Wenn Sie X jedoch zu einer Klassenvorlage machen:

%Vor%

gcc 4.7.2 und clang 3.0 beschweren sich beide mit "error: 'enum X :: E' ist eine Enumerationsvorlage [-pedantic]" und "error: enumeration kann keine Vorlage sein". Der Abschnitt des Standards, der meiner Meinung nach relevant ist (und aus dem diese Frage eigentlich stammt), ist §14 Vorlagen, deren erster Absatz lautet:

  

Die Deklaration in einer Template-Deklaration muss

sein      
  • deklarieren oder definieren Sie eine Funktion oder eine Klasse oder
  •   
  • definiere eine Memberfunktion, eine Memberklasse, eine Memberauflistung oder ein statisches Datenmember einer Klassenvorlage oder einer in eine Klasse geschachtelten Klasse Klassenvorlage oder
  •   
  • Definieren Sie eine Mitgliedervorlage einer Klassen- oder Klassenvorlage oder
  •   
  • sei eine Alias-Deklaration .
  •   

(Betonung meiner). Ist das also ein Compiler Bug, oder interpretiere ich die Aussage komplett falsch?

    
Taral 17.03.2014, 11:27
quelle

1 Antwort

3

Ich wurde gebeten, diese Antwort zu erstellen. Siehe Abschnitt [temp.mem.enum] 14.5.1.4/1 des C ++ - Standards:

  

Ein Aufzählungselement einer Klassenvorlage kann außerhalb der Klasse definiert werden   Klassenvorlagedefinition. [ Beispiel:

%Vor%      

-Endbeispiel ]

Neuere Version von clang (3.4) kompiliert Ihren Code erfolgreich mit dem Flag -pedantic-errors , wohingegen gcc 4.8.1 betrachtet es immer noch als Fehler . Ich denke, es ist ein gcc Bug.

    
Constructor 17.03.2014, 17:46
quelle