https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78966
Richard Smith <richard-gccbugzilla at metafoo dot co.uk> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |richard-gccbugzilla@metafoo | |.co.uk --- Comment #5 from Richard Smith <richard-gccbugzilla at metafoo dot co.uk> --- The vari<T...> in f is a non-deduced context because the corresponding argument is an overloaded function that cannot be resolved. The pack T can't be deduced, so it is inferred to be an empty pack. Here's another case that needs the above rules in order to work: template<typename> struct X {}; template<typename... TT> struct vari { vari(void(*)(X<char>)); }; template<typename... T> void f(vari<T...>); template<typename T> void g(X<T>); void h() { f(g); } // 'f' is equivalent to 'f<>'; T is an empty pack