To jest standard. Po pierwsze, dla nie typu parametru szablonu:
[temp.param/4]
Non typu szablonu parametrów ma jedno z następujących typów (ewentualnie cv wykwalifikowany)
- . ..
- Typ zawierający typ zastępczy .
Gdzie typy zastępcze mają następujące określone:
[dcl.spec.auto/1]
auto i decltype (auto) Type-Specyfikatory wykorzystywane są do wyznaczenia typu zastępczy, który będzie zastąpiony później przez odjęcie od inicjalizatora . Specyfikator typu auto jest również używany do wprowadzenia funkcji typu z typem powrotu z powrotem lub do zasygnalizowania, że lambda jest ogólną wartością lambda ([expr.prim.lambda.closure]). Specyfikator typu auto jest również używany do wprowadzenia deklaracji strukturyzowanego wiązania.
[dcl.spec.auto/5]
typ zastępczy może być również stosowany w typu specyfikatora-seq w nowego typu-id lub typu identyfikator nowej ekspresji i postaci specyfikator decl z parametr decl-specifier-seq deklaracji parametru w parametrze-szablonie .
Ponieważ kula powyżej mówi „typ zastępczy”, a taki typ może być oznaczony albo z auto
lub decltype(auto)
oba kompilatory są poprawne.
Dlatego nie spóźniam się na SO. Takie pytania sprawiają, że sama uczę się więcej o tym języku :) – StoryTeller
@StoryTeller Przyznaję, że przynajmniej dla mnie C++ nadal jest pełen niespodzianek :) –
Bardzo ładne pytanie. +1 i @StoryTeller: Zgadzam się z Tobą zdecydowanie. – skypjack