summaryrefslogtreecommitdiff
path: root/gcc/cp/search.c
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2021-07-12 16:35:18 -0400
committerPatrick Palka <ppalka@redhat.com>2021-07-12 16:35:18 -0400
commit8d75b8830e9dafb4e0c400c723653512adf40295 (patch)
treefcd8164e8bbbd2e9178ac9e7eae0035372eb2bfe /gcc/cp/search.c
parent8d980e84240c82502661758fbecd5f456018ea89 (diff)
downloadgcc-8d75b8830e9dafb4e0c400c723653512adf40295.tar.gz
c++: permit deduction guides at class scope [PR79501]
This adds support for declaring (class-scope) deduction guides for a member class template. Fortunately it seems only a couple of changes are needed in order for the existing CTAD machinery to handle them properly: we need to make sure to give them a FUNCTION_TYPE instead of a METHOD_TYPE, and we need to avoid using a BASELINK when looking them up. PR c++/79501 PR c++/100983 gcc/cp/ChangeLog: * decl.c (grokfndecl): Don't require that deduction guides are declared at namespace scope. Check that class-scope deduction guides have the same access as the member class template. (grokdeclarator): Pretend class-scope deduction guides are static. * search.c (lookup_member): Don't use a BASELINK for (class-scope) deduction guides. gcc/testsuite/ChangeLog: * g++.dg/cpp1z/class-deduction92.C: New test. * g++.dg/cpp1z/class-deduction93.C: New test. * g++.dg/cpp1z/class-deduction94.C: New test. * g++.dg/cpp1z/class-deduction95.C: New test.
Diffstat (limited to 'gcc/cp/search.c')
-rw-r--r--gcc/cp/search.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index 7b183685476..af41bfe5835 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -1226,7 +1226,10 @@ lookup_member (tree xbasetype, tree name, int protect, bool want_type,
rval = error_mark_node;
}
- if (rval && is_overloaded_fn (rval))
+ if (rval && is_overloaded_fn (rval)
+ /* Don't use a BASELINK for class-scope deduction guides since
+ they're not actually member functions. */
+ && !dguide_name_p (name))
rval = build_baselink (rval_binfo, basetype_path, rval,
(IDENTIFIER_CONV_OP_P (name)
? TREE_TYPE (name): NULL_TREE));