c++: warning for dependent template members [PR70417]
authorAnthony Sharp <anthonysharp15@gmail.com>
Sat, 4 Dec 2021 17:23:22 +0000 (17:23 +0000)
committerJason Merrill <jason@redhat.com>
Thu, 13 Jan 2022 21:01:52 +0000 (16:01 -0500)
commitb8ffa71e4271ae562c2d315b9b24c4979bbf8227
treeaebd29fe180c0bd88e3634cb2fb5315cf645eb60
parent7a7d8c3f6167fd45658ddbfa32adcfd2acc98eb4
c++: warning for dependent template members [PR70417]

Add a helpful warning message for when the user forgets to
include the "template" keyword after ., -> or :: when
accessing a member in a dependent context, where the member is a
template.

PR c++/70417

gcc/c-family/ChangeLog:

* c.opt: Added -Wmissing-template-keyword.

gcc/cp/ChangeLog:

* parser.c (cp_parser_id_expression): Handle
-Wmissing-template-keyword.
(struct saved_token_sentinel): Add modes to control what happens
on destruction.
(cp_parser_statement): Adjust.
(cp_parser_skip_entire_template_parameter_list): New function that
skips an entire template parameter list.
(cp_parser_require_end_of_template_parameter_list): Rename old
cp_parser_skip_to_end_of_template_parameter_list.
(cp_parser_skip_to_end_of_template_parameter_list): Refactor to be
called from one of the above two functions.
(cp_parser_lambda_declarator_opt)
(cp_parser_explicit_template_declaration)
(cp_parser_enclosed_template_argument_list): Adjust.

gcc/ChangeLog:

* doc/invoke.texi: Documentation for Wmissing-template-keyword.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/variadic-mem_fn2.C: Catch warning about missing
template keyword.
* g++.dg/template/dependent-name17.C: New test.
* g++.dg/template/dependent-name18.C: New test.

Co-authored-by: Jason Merrill <jason@redhat.com>
gcc/c-family/c.opt
gcc/cp/parser.c
gcc/doc/invoke.texi
gcc/testsuite/g++.dg/cpp0x/variadic-mem_fn2.C
gcc/testsuite/g++.dg/template/dependent-name17.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/dependent-name18.C [new file with mode: 0644]