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

Reply via email to