Шаблоны С++ Угловые скобки Pitfall - Что такое С++ 11?
В С++ 11 это действительный синтаксис:
vector<vector<float>> MyMatrix;
тогда как раньше это должно было быть написано так (обратите внимание на пробел):
vector<vector<float> > MyMatrix;
Мой вопрос в том, какое исправление используется стандартом для первой версии?
Может ли быть так же просто, как сделать >
токен вместо >>
? Если это не так, что не работает с этим подходом?
Я считаю, что такие формы, как myTemplate< x>>3 >
, не являются проблемой, поскольку вы можете устранить их, выполнив myTemplate<(x>>3)>
.
Ответы
Ответ 1
Исправлено добавлением специального случая к правилам синтаксического анализа при анализе аргументов шаблона.
С++ 11 14.2/3: При анализе списка шаблонов-аргументов первый не-вложенный >
берется как конечный разделитель, а не оператор большего. Аналогично, первый не-вложенный >>
рассматривается как два последовательных, но отличных токена >
, первый из которых берется как конец списка шаблонов-аргументов и завершает идентификатор шаблона.