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] |
Yes, it seems odd, the same happens for template functions, like simply: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.
template <class T> void foo();
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.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.
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 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.
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] |