From: Patrick Palka Date: Tue, 14 Oct 2025 16:56:23 +0000 (-0400) Subject: c++: mem-initializer-id qualified name lookup is type-only [PR122192] X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=97da8fece19caf0277c2be523520d09252821973;p=thirdparty%2Fgcc.git c++: mem-initializer-id qualified name lookup is type-only [PR122192] Since a mem-initializer needs to be able to initialize any base class, lookup for which is type-only, we in turn need to make mem-initializer-id qualified name lookup type-only too. PR c++/122192 gcc/cp/ChangeLog: * parser.cc (cp_parser_mem_initializer_id): Pass class_type instead of typename_type to cp_parser_class_name in the nested-name-specifier case. gcc/testsuite/ChangeLog: * g++.dg/template/dependent-base6.C: Verify mem-initializer-id qualified name lookup is type-only too. Reported-by: Vincent X Reviewed-by: Jason Merrill --- diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 1ed2f3767e1..9280632d47b 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -19091,7 +19091,7 @@ cp_parser_mem_initializer_id (cp_parser* parser) return cp_parser_class_name (parser, /*typename_keyword_p=*/true, /*template_keyword_p=*/template_p, - typename_type, + class_type, /*check_dependency_p=*/true, /*class_head_p=*/false, /*is_declaration=*/true); diff --git a/gcc/testsuite/g++.dg/template/dependent-base6.C b/gcc/testsuite/g++.dg/template/dependent-base6.C index b4bc5c279a5..9f2a7a23923 100644 --- a/gcc/testsuite/g++.dg/template/dependent-base6.C +++ b/gcc/testsuite/g++.dg/template/dependent-base6.C @@ -8,5 +8,7 @@ struct A { struct S1 : A::B { }; // OK -template struct S2 : T::B { }; // OK, used to fail +template struct S2 : T::B { // OK, used to fail + S2() : T::B() { } // Also OK +}; template struct S2;