diff options
author | Patrick Palka <ppalka@redhat.com> | 2021-08-18 08:37:42 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2021-08-18 08:37:42 -0400 |
commit | a6b3db3e8625a3cba1240f0b5e1a29bd6c68b8ca (patch) | |
tree | 2a1372b13a22a9315890a6cb9d2aabc56f2e9a0c | |
parent | 88ef1a14bb4ba2bb9e6742bb5ed29d83b30723d0 (diff) | |
download | gcc-a6b3db3e8625a3cba1240f0b5e1a29bd6c68b8ca.zip gcc-a6b3db3e8625a3cba1240f0b5e1a29bd6c68b8ca.tar.gz gcc-a6b3db3e8625a3cba1240f0b5e1a29bd6c68b8ca.tar.bz2 |
c++: ignore explicit dguides during NTTP CTAD [PR101883]
Since (template) argument passing is a copy-initialization context,
we mustn't consider explicit deduction guides when deducing a CTAD
placeholder type of an NTTP.
PR c++/101883
gcc/cp/ChangeLog:
* pt.c (convert_template_argument): Pass LOOKUP_IMPLICIT to
do_auto_deduction.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/nontype-class49.C: New test.
-rw-r--r-- | gcc/cp/pt.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/nontype-class49.C | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 484723b..0c14966 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8486,7 +8486,8 @@ convert_template_argument (tree parm, can happen in the context of -fnew-ttp-matching. */; else if (tree a = type_uses_auto (t)) { - t = do_auto_deduction (t, arg, a, complain, adc_unify, args); + t = do_auto_deduction (t, arg, a, complain, adc_unify, args, + LOOKUP_IMPLICIT); if (t == error_mark_node) return error_mark_node; } diff --git a/gcc/testsuite/g++.dg/cpp2a/nontype-class49.C b/gcc/testsuite/g++.dg/cpp2a/nontype-class49.C new file mode 100644 index 0000000..c83e407 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/nontype-class49.C @@ -0,0 +1,8 @@ +// PR c++/101883 +// { dg-do compile { target c++20 } } + +template<class T> struct C { constexpr C(int) { } }; +explicit C(int) -> C<int>; + +template<C c> struct X { }; +X<1> x; // { dg-error "deduction|no match" } |