From 656c0212909bc91b1025aa12774d981adb531b4c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 5 Jul 2022 17:05:47 -0400 Subject: [PATCH] c++: dependent conversion operator lookup [PR106179] This testcase demonstrates that my assumption that we would only be interested in a class template lookup if the template-id is followed by :: was wrong. PR c++/106179 PR c++/106024 gcc/cp/ChangeLog: * parser.cc (cp_parser_lookup_name): Remove :: requirement for using unqualified lookup result. gcc/testsuite/ChangeLog: * g++.dg/template/operator16.C: New test. --- gcc/cp/parser.cc | 4 ---- gcc/testsuite/g++.dg/template/operator16.C | 9 +++++++++ 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/operator16.C diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index df657a3fb2b..5cd6a527d93 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -30738,10 +30738,6 @@ cp_parser_lookup_name (cp_parser *parser, tree name, looking at a template arg list. */ if (!cp_parser_skip_entire_template_parameter_list (parser)) decl = NULL_TREE; - /* And only use the unqualified lookup if we're looking at ::. */ - if (decl - && !cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)) - decl = NULL_TREE; } /* If we know we're looking for a type (e.g. A in p->A::x), diff --git a/gcc/testsuite/g++.dg/template/operator16.C b/gcc/testsuite/g++.dg/template/operator16.C new file mode 100644 index 00000000000..434a266850c --- /dev/null +++ b/gcc/testsuite/g++.dg/template/operator16.C @@ -0,0 +1,9 @@ +// PR c++/106179 + +struct Mat { + template Mat(); +}; +template struct Mat_; +template Mat::Mat() { + _Tp commaInitializer = commaInitializer.operator Mat_<_Tp>; +} -- 2.11.4.GIT