]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: NTTP type CTAD w/ tmpl from current inst [PR113649]
authorPatrick Palka <ppalka@redhat.com>
Thu, 8 Feb 2024 14:10:44 +0000 (09:10 -0500)
committerPatrick Palka <ppalka@redhat.com>
Thu, 8 Feb 2024 14:10:44 +0000 (09:10 -0500)
commit465b9c51f5c79ce3fbb36f1abc7194b39ad9cae7
tree2ff49aa60b96d4aa138280aa2812e952b2b9f633
parentd2d5ef6e22082d945c4d255b44194155680a93bd
c++: NTTP type CTAD w/ tmpl from current inst [PR113649]

Since template argument coercion happens relative to the most general
template (for a class template at least), during NTTP type CTAD we might
need to consider outer arguments particularly if the CTAD template is from
the current instantiation (and so depends on outer template parameters).

This patch makes do_class_deduction substitute as many levels of outer
template arguments into a CTAD template (from the current instantiation)
as it can take.

PR c++/113649

gcc/cp/ChangeLog:

* pt.cc (do_class_deduction): Add outer_targs parameter.
Substitute outer arguments into the CTAD template.
(do_auto_deduction): Pass outer_targs to do_class_deduction.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/nontype-class65.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/pt.cc
gcc/testsuite/g++.dg/cpp2a/nontype-class65.C [new file with mode: 0644]