2016-11-04 72 views
0

編譯:TDM-GCC 5.1.0(SJLJ放卷)不能傳遞變量參數以嵌套的可變參數模板電話

我在傳遞可變數量的類型參數的靜態可變參數模板方法調用的內部問題模板功能。我已經嘗試了每種語法變體,但它不會編譯,所以我只能假設我做錯了。

這裏的設置:

#include <iostream> 

template <class T> 
struct Foo 
{ 
    template <class...> 
    static void test() 
    { 
     std::cout << "Foo<T>::test<...>() called."; 
    } 
}; 


template <class T, class... Args> 
void bar() 
{ 
    Foo<T>::test<Args...>(); //error happens here 
} 

int main() 
{ 
    bar<int, int>(); 
} 

這使編譯器錯誤:expected primary-expression before '...' token

我以爲包擴展看起來像Args...,但這似乎並沒有在這裏工作。

任何幫助表示讚賞。

+2

你可能會發現這個問題的信息:「在哪裏,爲什麼我必須把'模板'和'typename'關鍵字?「](https://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename-keywords) – WhozCraig

回答

1

你需要告訴解析器依賴test是一個模板:

template <class T, class... Args> 
void bar() 
{ 
    Foo<T>::template test<Args...>(); //error happens here 
      ^^^^^^^^^ 
} 

demo