Шаблоны С++ Угловые скобки Pitfall - Что такое С++ 11?

В С++ 11 это действительный синтаксис:

vector<vector<float>> MyMatrix;

тогда как раньше это должно было быть написано так (обратите внимание на пробел):

vector<vector<float> > MyMatrix;

Мой вопрос в том, какое исправление используется стандартом для первой версии?

Может ли быть так же просто, как сделать > токен вместо >>? Если это не так, что не работает с этим подходом?

Я считаю, что такие формы, как myTemplate< x>>3 >, не являются проблемой, поскольку вы можете устранить их, выполнив myTemplate<(x>>3)>.

Ответы

Ответ 1

Исправлено добавлением специального случая к правилам синтаксического анализа при анализе аргументов шаблона.

С++ 11 14.2/3: При анализе списка шаблонов-аргументов первый не-вложенный > берется как конечный разделитель, а не оператор большего. Аналогично, первый не-вложенный >> рассматривается как два последовательных, но отличных токена >, первый из которых берется как конец списка шаблонов-аргументов и завершает идентификатор шаблона.