оба компилятора верны.

аружил, что gcc и clang позволяют использоватьdecltype(auto) в предложении типа параметра шаблона нетипичного типа. Например.:

template <decltype(auto)>
struct X {};

int foo ;

int main() {
    X<(foo)> x;
    static_cast<void>(x);
}

[живое демо gcc] [живой демо-лязг]

Это стандартная совместимая функция или расширение GNU?

 W.F.03 сент. 2017 г., 22:06
@StoryTeller Я признаю, что, по крайней мере для меня, C ++ все еще полон сюрпризов :)
 StoryTeller03 сент. 2017 г., 22:02
Вот почему я поздно ложусь на ТАК. Именно такие вопросы заставляют меня больше узнавать о языке :)
 skypjack03 сент. 2017 г., 22:29
Очень хороший вопрос. +1 И @StoryTeller: Я с тобой определенно согласен.

Ответы на вопрос(1)

Решение Вопроса

[Temp.param / 4]

Нетипизированный шаблон-параметр должен иметь один из следующих (необязательно квалифицированных cv) типов:

...тип, который содержиттип заполнителя.

Где типы заполнителей имеют следующие указанные:

[Dcl.spec.auto/1]

Спецификаторы типа auto и decltype (auto) используются для обозначения типа заполнителя это будет заменено позже вычетом из инициализатора. Автоматический спецификатор типа также используется для представления типа функции с конечным типом возврата или для обозначения того, что лямбда является универсальной лямбда ([expr.prim.lambda.closure]). Автоматический спецификатор типа также используется для представления объявления структурированной привязки.

[Dcl.spec.auto/5]

Тип заполнителя также может быть использован в спецификаторе типа-seq в новом идентификаторе типа или идентификаторе типа нового выражения ив качестве decl-спецификатора объявления-параметра decl-specier-seq в шаблоне-параметре.

Поскольку в пуле выше указано «тип заполнителя», такой тип может быть обозначен какauto или жеdecltype(auto)оба компилятора верны.

Ваш ответ на вопрос