Разве MSVC не реализует схему позднего анализа? В такой схеме компилятор не зависит от typename
. Он просто хранит весь токен между фигурными скобками определения шаблона, и когда шаблон создается, он анализирует эти токены. Так как он знает, что есть, а что нет, он будет работать без typename
.
Но если компилятор не диагностирует отсутствующее typename
при создании экземпляра шаблона, он не соответствует.
Или действительно возможно сделать вывод, что iterator_category является либо типом, либо функцией, потому что за ней следует пара скобок ()?
Все, что имеет значение, это то, является ли имя зависимым и квалифицированным. Может ли шаблон сделать вывод, что имя всегда является типом, не имеет значения. Это может иметь значение для качества сообщений об ошибках при отсутствии typename
s.
FWIW, нет, невозможно ничего сделать о iterator_category
на уровне языка.