#include <iostream>
using namespace std;
template <typename Arg0, typename ... Args>
struct foo_variadic2 {};
template <template <class...> class TT, class... Args>
void f(const TT<Args...>&)
{
cout << __PRETTY_FUNCTION__ << endl;
}
int main()
{
f(foo_variadic2<int>{});
f(foo_variadic2<int, double>{});
// doesn't compile
// f<foo_variadic2>(foo_variadic2<int>{});
// f<foo_variadic2, int>(foo_variadic2<int>{});
// gives a different error message
// f<foo_variadic2, int, double>(foo_variadic2<int, double>{});
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzAsIHR5cGVuYW1lIC4uLiBBcmdzPgpzdHJ1Y3QgZm9vX3ZhcmlhZGljMiB7fTsKCnRlbXBsYXRlIDx0ZW1wbGF0ZSA8Y2xhc3MuLi4+IGNsYXNzIFRULCBjbGFzcy4uLiBBcmdzPgp2b2lkIGYoY29uc3QgVFQ8QXJncy4uLj4mKQp7CiAgICBjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CiAgICBmKGZvb192YXJpYWRpYzI8aW50Pnt9KTsKICAgIGYoZm9vX3ZhcmlhZGljMjxpbnQsIGRvdWJsZT57fSk7CgogICAgLy8gZG9lc24ndCBjb21waWxlCiAgICAvLyBmPGZvb192YXJpYWRpYzI+KGZvb192YXJpYWRpYzI8aW50Pnt9KTsKICAgIC8vIGY8Zm9vX3ZhcmlhZGljMiwgaW50Pihmb29fdmFyaWFkaWMyPGludD57fSk7CgogICAgLy8gZ2l2ZXMgYSBkaWZmZXJlbnQgZXJyb3IgbWVzc2FnZQogICAgLy8gZjxmb29fdmFyaWFkaWMyLCBpbnQsIGRvdWJsZT4oZm9vX3ZhcmlhZGljMjxpbnQsIGRvdWJsZT57fSk7Cn0KIAo=