c++: Rewrite members for all deduction guides. [PR96199]
authorJason Merrill <jason@redhat.com>
Fri, 14 Aug 2020 22:01:27 +0000 (18:01 -0400)
committerJason Merrill <jason@redhat.com>
Tue, 18 Aug 2020 20:20:09 +0000 (16:20 -0400)
commitb871301f09be7061904dc87880919d30e6afef8f
treea4cad1e376c3f4c63ca7df8e5bc765687314aa72
parent9125cf8c33b710c378bfb3c7e67ec2f9f1c523c9
c++: Rewrite members for all deduction guides. [PR96199]

After the last patch, it occurred to me that we could run into the
specialization issue with non-alias deduction guides as well, so this patch
extends the rewriting to C++17 mode.

Doing this revealed that we weren't properly pushing into class scope for
normalization.

gcc/cp/ChangeLog:

PR c++/96199
* pt.c (tsubst_aggr_type): Rewrite in C++17, too.
(maybe_dependent_member_ref): Likewise.
(build_deduction_guide): Re-substitute template parms.
* cp-tree.h (struct push_nested_class_guard): New.
* constraint.cc (get_normalized_constraints_from_decl): Use it.

gcc/testsuite/ChangeLog:

PR c++/96199
* g++.dg/cpp1z/class-deduction-spec1.C: New test.
gcc/cp/constraint.cc
gcc/cp/cp-tree.h
gcc/cp/pt.c
gcc/testsuite/g++.dg/cpp1z/class-deduction-spec1.C [new file with mode: 0644]