Poniższy kod kompiluje czysto GCC:Czy można użyć poprzedniego parametru funkcji do zadeklarowania nowego?
void func(int arg1, decltype(arg1) arg2)
{
(void)arg2;
}
int main(){}
użyłem tego polecenia do kompilacji:
g++ -std=c++14 test.cpp -o test -pedantic-errors -Wall -Wextra
Ale takie użycie parametru w środku deklaracji funkcji wydaje się dziwne. Czy rzeczywiście jest prawidłowe w standardowym C++, czy jest to rozszerzenie GCC?
Zakładam, że typ 'arg1' jest dużo bardziej skomplikowana w rzeczywistym kodzie? I bez patrzenia na specyfikację lub jakiekolwiek referencje, ale wiedząc trochę o analizie składniowej, zgaduję, że to jest w porządku, ponieważ parsowanie języków takich jak C++ jest bardzo sprawą od góry do dołu od lewej do prawej. Gdy kompilator analizuje deklarację dla "arg2", musi już przeanalizować deklarację "arg1", więc na pewno zna typ "arg1". Jeśli jest to naprawdę "dozwolone", nie wiem, ani czy działa w przeciwnym kierunku (używając 'decltype (arg2)' dla 'arg1'). –
@JoachimPileborg oczywiście, rzeczywisty kod ma znacznie bardziej złożony typ dla 'arg1', w przeciwnym razie nawet pomyślałem o użyciu' decltype' na nim. – Ruslan
FWIW, MSVC++ 2013 i jego IntelliSense (EDG) zarówno go akceptują. – MSalters