Modelli di C ++ Angle Brackets Pitfall – Qual è la correzione di C ++ 11?

In C ++ 11, questa è ora la syntax valida:

vector<vector> MyMatrix; 

mentre in precedenza, doveva essere scritto in questo modo (notare lo spazio):

 vector<vector > MyMatrix; 

La mia domanda è qual è la correzione che lo standard utilizza per consentire la prima versione?

Potrebbe essere semplicemente come fare > un token invece di >> ? Se non è così, cosa non funziona con questo approccio?

Considero che forms come myTemplate>3 > siano un problema, dato che puoi disambigarle facendo myTemplate>3)> .

Viene risolto aggiungendo un caso speciale alle regole di analisi durante l’analisi degli argomenti del modello.

C ++ 11 14.2 / 3: Quando si analizza un elenco argomento-modello , il primo non annidato viene preso come delimitatore finale anziché come operatore maggiore di. Allo stesso modo, il primo non annidato >> viene considerato come due token consecutivi ma distinti, il primo dei quali viene considerato come la fine dell’elenco-argomento- modello e completa l’ id-modello .