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