Variadic templates without function parameters

c++, c++11, function-parameter, templates, variadic-templates

Solution

template<class First> // 1 template parameter
void print()
{
    cout << 1 << endl;
}

#if 0
template<class First, class ... Rest> // >=1 template parameters -- ambiguity!
void print()
{
    cout << 1 << endl;
    print<Rest...>();
}
#endif

template<class First, class Second, class ... Rest> // >=2 template parameters
void print()
{
    cout << 1 << endl;
    print<Second, Rest...>();
}

Problem

Can I use variadic templates without using the template parameters as function parameters? When I use them, it compiles: ``` #include <iostream> using namespace std; template<class First> void print(First first) { cout << 1 << endl; } template<class First, class ... Rest> void print(First first, Rest ...rest) { cout << 1 << endl; print<Rest...>(rest...); } int main() { print<int,int,int>(1,2,3); } ``` But when I don't use them, it doesn't compile and complains about an ambiguity: ``` #include <iostream> using namespace std; template<class First> void print() { cout << 1 << endl; } template<class First, class ... Rest> void print() { cout << 1 << endl; print<Rest...>(); } int main() { print<int,int,int>(); } ``` Unfortunately the classes I want to give as template parameters are not instantiable (they have static functions that are called inside of the template function). Is there a way to do this?

Original source