Мой компилятор позволяет "T &...". Это расширение?
Я был удивлен, когда работали
template<typename T>
void f(T &...);
Я думал, что я должен объявить "Т" как "typename... T", и что он работает только в С++ 0x. Но выше скомпилировано в строгом режиме С++ 03. Что происходит?
Ответ 1
Это просто плохой старый синтаксис C varargs; грамматика позволяет исключить запятую. Следующие эквиваленты:
int printf(const char* fmt, ...);
int printf(const char* fmt...);
Ответ 2
Вы назвали функцию? Функции шаблона не скомпилируются до тех пор, пока вы их не назовете.
И в Visual Studio 2010 IntelliSense показывает, что реальный синтаксис этой функции будет