Wenn ich die Adresse eines Rechtsverschiebungsoperators nehme und sie als Vorlageparameter übergebe, wird das rechte Verschiebungssymbol als Ende der Vorlagenparameterliste falsch gelesen, und Die daraus resultierende Verwirrung verursacht mehrere Fehler.Syntaxfehler, wenn der Rechtsverschiebungsoperator als Vorlagenparameter verwendet wird
template <class T, void(T::*)(int)> struct TemplateMagic {};
struct TestStruct { void operator>> (int) {} };
int main() {
//All the errors are on this line:
TemplateMagic<TestStruct, &TestStruct::operator>> >* ptr;
}
Ausführen dieses in Microsoft Visual Studio Express 2013 für Windows Desktop Version 12.0.31101.00 Update 4 gibt die folgenden Fehler:
Fehler C2143: Syntaxfehler: fehlen; vor '>'
Fehler C2275: 'TestStruct': illegale Verwendung dieser Art als Ausdruck
Fehler C2833: 'Operator>' ist kein Operator erkannt oder
Was geben Sie als Ich kann sagen, die operator>> >
Symbole sind auseinander gebrochen, so dass es liest es als operator>
10, gefolgt von einem Abschluss >
, um die Vorlage Argumente zu schließen, und endet mit einem Ersatz >
für die Lulz. Ich nehme an, das ist ein Fehler.
Gibt es eine Möglichkeit, dies umzuschreiben, damit es als gültig erkannt wird?
Haben Sie versucht, es in Klammern zu setzen: 'TemplateMagic>)> * ptr;'? –