This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [C++ Patch] PR 18747


Hi,

On 09/06/2012 02:03 AM, Jason Merrill wrote:
but note that for:

template <class T>
struct A
{
    int select() { return 0; }
};

we have parser->num_template_parameter_lists == 1 and num_templates ==
0. Thus it seems that the case 'num_templates + 1' isn't (just) about
member templates...

That's odd, num_templates should be 1.
Yes, it seems odd, the same happens for template functions, like simply:

template <class T>
void foo();

Really, whatever we do at least the comment should be adjusted not to mention only member templates.
  And I notice that cp_parser_check_declarator_template_parameters has
another copy of the num_template_headers_for_class logic; they should
be merged.
Something like the attached passes testing, the clean-up is nice, but I'm not sure about the specific details of the existing code vs num_template_headers_for_class, whether we can just call the latter as I did and be done.
I think the problem with 24314 is that we try to decide how many
template headers we want before we determine what declaration we're
looking at.  When we have a redefinition or specialization, we know
exactly how many headers we want, and we should check accordingly
rather than say N or N+1.
I see. Yesterday at some point I wondered whether we could do that already when cp_parser_check_template_parameters is called, that is remove the + 1 case and make the callers more precise. But I understand not that it's too early. Then, are you under the impression that we should still have cp_parser_check_template_parameters as-is and add a check later, or have only the late one?

I'm looking more into this.

Thanks,
Paolo.

Attachment: p
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]