Считается ли это ошибкой в стандарте?
номер
Шаблоны - это именованная конструкция, которая генерирует другую конструкцию (классы / функции / переменные) на основе набора параметров. Имя шаблона не имя конструкции, которую он генерирует. Имя шаблона - это просто имя шаблона; чтобы назвать то, что генерирует шаблон, вы должны предоставить параметры шаблона.
Foo
- имя шаблона; Foo<>
- это имя класса, созданного этим шаблоном, и связанные с ним параметры шаблона.
Есть несколько мест, где C ++ позволяет использовать шаблон таким образом, чтобы его параметры выводились из последовательности выражений. Но это очень специфические места, созданные для удобства. Они не существуют для сокрытия того факта, что имя представляет шаблон, а не сгенерированную конструкцию.
Есть предложение исправить это?
Нет ничего сломанного, чтобы исправить. И в настоящее время нет предложений по добавлению изменений таким образом.
Есть ли какие-либо проблемы с пропуском угловых скобок?
Определите «актуальную проблему». Возможно ли теоретически изменить язык так, чтобы, если все параметры шаблона были по умолчанию, имя шаблона можно было использовать без параметров шаблона, чтобы одновременно означать шаблон и , который генерирует шаблон?
Возможно возможно . Но было бы сложно указать. Вам понадобится серьезный врач-специалист, который хорошо разбирается в грамматике C ++, чтобы точно знать, возможно ли это, и что именно нужно изменить, чтобы это сделать.
Но, в конце концов, это будет полезно только для небольшого, выбранного набора шаблонов: шаблонов, которые имеют значения по умолчанию для всех своих параметров. Реальный вопрос в том, является ли это достаточно распространенным случаем, чтобы стоить усилий.