Se si prende l'indirizzo di un operatore di spostamento a destra e lo si passa come parametro di modello, il simbolo di spostamento a destra non viene letto come la fine dell'elenco dei parametri del modello e la confusione risultante sta causando più errori.Errori di sintassi quando l'operatore di spostamento a destra viene utilizzato come parametro modello
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;
}
L'esecuzione di questo in Microsoft Visual Studio Express 2013 per Windows Desktop versione 12.0.31101.00 Update 4 dà i seguenti errori:
errore C2143: errore di sintassi: manca ';' prima '>'
errore C2275: 'TestStruct': uso illegale di questo tipo come espressione
errore C2833: 'operatore>' non è un operatore o digitare
Per quanto riconosciuto Posso dire, i simboli operator>> >
vengono suddivisi in modo da leggerlo come operator>
, seguito da un >
terminante per chiudere gli argomenti del modello e termina con un >
di riserva per il lulz. Presumo che questo sia un bug.
C'è un modo per riformulare questo in modo che venga riconosciuto come valido?
Hai provato a metterlo tra parentesi: 'TemplateMagic>)> * ptr;'? –