无法将变量Args传递给嵌套的可变参数模板调用

时间:2016-11-04 16:51:04

标签: c++ c++11 nested static-methods variadic-templates

编译器: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...,但这似乎不适用于此。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要告诉解析器,依赖test是模板:

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

demo