Ответ 1
Это стандарт. Во-первых, для параметра непигового шаблона:
Параметр шаблона, не относящийся к типу, должен иметь одно из следующих (необязательно cv-qualified):
- ...
- тип, содержащий тип заполнителя.
Если типы заполнителей имеют следующие значения:
Атрибуты auto и decltype (auto) используются для обозначения тип-заполнителя, который будет заменен позже путем вычитания из инициализатор. Автоматический тип-спецификатор также используется для введения тип функции, имеющий тип возвращаемого типа возврата или означающий, что лямбда - это общая лямбда ([expr.prim.lambda.closure]). Авто Тип-спецификатор также используется для введения структурированного связывания декларация.
Тип-заполнитель также можно использовать в типе-спецификаторе-seq в new-type-id или идентификатор типа нового выражения и как спецификатор decl декларация параметра decl-specifier-seq в шаблон-параметров.
Так как пуля выше говорит "тип заполнителя", и такой тип может быть обозначен либо с помощью auto
, либо decltype(auto)
, оба компилятора верны.