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
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '395419',
    'url' => 'forward-declare-a-member-enumeration-of-a-class-template',
];

$_COOKIE = [
    'advanced-frontend' => '63b951676d28be83e83052d0c7790389',
    '_csrf-frontend' => '2e28ae2c0c85263d6a1698f0591cec579b93a0ae76bf57979889eb1632eab117a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"HFyCOE_NmKdR1etDaa88-ELSwqqmoXCQ";}',
];

$_SESSION = [
    '__flash' => [],
];