Können Operatoren für initializer_list-Literale überladen werden? [Duplikat]

9

Ich versuche, Operatoren für std::initializer_list zu überladen, aber die folgenden kompiliert weder in GCC 4.7.2 noch Clang 3.2:

%Vor%

13.5 / 6 besagt, dass eine Operatorfunktion mindestens einen Parameter haben soll, dessen Typ eine Klasse, eine Enumeration oder ein Verweis auf beides ist, und der Standard gibt initializer_list als eine Template-Klasse an, also scheint es mir so zu sein konform sein. Offensichtlich denken sowohl Clang als auch GCC, dass ich versuche, ihre Nicht-Standard-Blockausdrücke zu verwenden.

GCC:

%Vor%

Clang:

%Vor%

Sollte das kompilieren? Wenn nicht, warum nicht?

BEARBEITEN :

Und nicht überraschend, der November CTP von VS 2012 scheitert auch:

%Vor%     
Seth Carnegie 16.01.2013, 23:55
quelle

1 Antwort

4

Soweit ich das verstehe, 13.5 / 6,

  

Eine Operatorfunktion soll entweder eine nicht statische Elementfunktion oder eine Nichtmitgliedsfunktion sein und haben   mindestens ein Parameter, dessen Typ eine Klasse, eine Referenz auf eine Klasse, eine Aufzählung oder eine Referenz auf eine   Aufzählung

Das sollte nicht möglich sein. Braced-Init-Listen sind nicht identisch mit std::initializer_list s und sind nicht austauschbar. Folgendes sollte jedoch funktionieren:

%Vor%

Oder das:

%Vor%

Update: Um es klarzustellen: Es gibt keine Regel in der Sprachgrammatik, die es erlaubt, dass eine starre-init-Liste in dem Kontext erscheint, der vom OP vorgeschlagen wird. Braced-Init-Listen können nur in Kontexten angezeigt werden, in denen etwas initialisiert werden soll.

    
Kerrek SB 17.01.2013, 00:03
quelle