The problem is likely deducibility. {}
could be uniform initializers to any of the arguments.
This works:
#include
template
void foo(std::initializer_list... args)
{
}
template
void foo(Values&&... args)
{
}
int main()
{
foo(1, 2, 3, "hello", 'a');
foo({1}, {2, 3});
}
See it Live on Coliru