On 05/27/2014 07:57 AM, Pedro Alves wrote:
And after the fix for 59195, due to:

  static void
  d_print_cast (struct d_print_info *dpi, int options,
               const struct demangle_component *dc)
  {
  ...
    /* For a cast operator, we need the template parameters from
       the enclosing template in scope for processing the type.  */
    if (dpi->current_template != NULL)
      {
        dpt.next = dpi->templates;
        dpi->templates = &dpt;
        dpt.template_decl = dpi->current_template;
      }

when printing the template argument list of A (what should be "<sizeof
(int)>"), the template parameter 0 (that is, "T_", the '**' above) now
refers to the first parameter of the the template argument list of the
'A' template (the '*' above), exactly what we were already trying to
print.  This leads to infinite recursion, and stack exaustion.  The
template parameter 0 should actually refer to the first parameter of
the 'function_temp' template.

It seems that the problem here is more general; a template argument list is not in scope within that same template argument list. Can't we fix that without special-casing conversion ops?

Jason

Reply via email to