12
我驚訝的是,下面的工作我的編譯器允許「T&...」。這是一個擴展嗎?
template<typename T>
void f(T &...);
我認爲我必須聲明「T」作爲「類型名稱... T」的話,那它只能在的C++ 0x。但以上編譯嚴格的C++ 03模式。這是怎麼回事?
我驚訝的是,下面的工作我的編譯器允許「T&...」。這是一個擴展嗎?
template<typename T>
void f(T &...);
我認爲我必須聲明「T」作爲「類型名稱... T」的話,那它只能在的C++ 0x。但以上編譯嚴格的C++ 03模式。這是怎麼回事?
這只是舊的C varargs語法;該語法允許省略逗號。以下是等效的:
int printf(const char* fmt, ...);
int printf(const char* fmt...);
您是否調用過該函數?在調用它們之前,模板函數不會被編譯。 並在Visual Studio 2010中,智能感知顯示功能的真正的語法將
template <class T> void f(T&, ...)
聞起來像老可變參數的語法。
合理! – 2011-02-05 16:57:43