Ich versuche, Operatoren für std::initializer_list
zu überladen, aber die folgenden kompiliert weder in GCC 4.7.2 noch Clang 3.2:
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%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:
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.
Tags und Links c++ operator-overloading initializer-list