In C++11, this is now valid syntax:
vector<vector<float>> MyMatrix;
whereas previously, it had to be written like this (notice the space):
vector<vector<float> > MyMatrix;
My question is what is the fix that the standard uses to allow the first version?
Could it be as simply as making >
a token instead of >>
? If that's not it, what does not work with this approach?
I consider that forms like myTemplate< x>>3 >
are a non-problem, since you can disambiguate them by doing myTemplate<(x>>3)>
.
It's fixed by adding a special case to the parsing rules when parsing template arguments.
C++11 14.2/3: When parsing a template-argument-list, the first non-nested
>
is taken as the ending delimiter rather than a greater-than operator. Similarly, the first non-nested>>
is treated as two consecutive but distinct>
tokens, the first of which is taken as the end of the template-argument-list and completes the template-id.
来源:https://stackoverflow.com/questions/15785496/c-templates-angle-brackets-pitfall-what-is-the-c11-fix