https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118530

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Depends on|                            |112810

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> ---
For 'auto' issues / return-type issues in general, see also PR112810.

* * *

For the last testcase, it fails in decl.cc's
8559            fail = !comptypes (TREE_TYPE (decl), TREE_TYPE (variant),
8560                               COMPARE_STRICT);

with debug(decl) and debug(variant) printing:
    full-name "auto base(T) [with T = int]"
    full-name "auto variant(T) [with T = int]"

The types as seen by comparetypes are:
  type <template_type_parm 0x7ffff73d2690 auto ...
     arg-types <tree_list ... 
        value <integer_type 0x7ffff72285e8 int
  type <integer_type 0x7ffff72285e8 int

Thus, while the variant function is template-resolved, the base function isn't,
causing the type mismatch.

 * * *

For 'variant' this conversion happens in call.cc's build_over_call via
  if (!already_used
      && !mark_used (fn, complain))

where decl2.cc's 'mark_used' code calls 
  if (undeduced_auto_decl (decl)
    maybe_instantiate_decl (decl);


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112810
[Bug 112810] bogus ambiguous overload resolution when taking address of
static/xobj member function template introduced by using declaration where
candidates have a mismatched deduced return type

Reply via email to