Подтвердить что ты не робот

Мой компилятор позволяет "T &...". Это расширение?

Я был удивлен, когда работали

template<typename T>
void f(T &...);

Я думал, что я должен объявить "Т" как "typename... T", и что он работает только в С++ 0x. Но выше скомпилировано в строгом режиме С++ 03. Что происходит?

4b9b3361

Ответ 1

Это просто плохой старый синтаксис C varargs; грамматика позволяет исключить запятую. Следующие эквиваленты:

int printf(const char* fmt, ...);
int printf(const char* fmt...);

Ответ 2

Вы назвали функцию? Функции шаблона не скомпилируются до тех пор, пока вы их не назовете. И в Visual Studio 2010 IntelliSense показывает, что реальный синтаксис этой функции будет

template <class T> void f(T&, ...)

Пахнет синтаксисом старого переменного аргумента.