template<typename U, typename... T>
void f1(void(*)(U, T...)) {
}
template<typename... T, typename U>
void f2(void(*)(T..., U)) {
}
void g(int, char) { }
int main() {
f1(g);
// f2<int, char>(g); // does not compile
// f2(g); // does not compile
}
dGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUuLi4gVD4Kdm9pZCBmMSh2b2lkKCopKFUsIFQuLi4pKSB7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lLi4uIFQsIHR5cGVuYW1lIFU+CnZvaWQgZjIodm9pZCgqKShULi4uLCBVKSkgewp9Cgp2b2lkIGcoaW50LCBjaGFyKSB7IH0KCmludCBtYWluKCkgewogIGYxKGcpOwogIC8vIGYyPGludCwgY2hhcj4oZyk7ICAvLyBkb2VzIG5vdCBjb21waWxlCiAgLy8gZjIoZyk7ICAvLyBkb2VzIG5vdCBjb21waWxlCn0=