diff options
author | Jason Merrill <jason@redhat.com> | 2021-04-14 14:14:31 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2021-04-14 14:14:31 -0400 |
commit | 00a2774923c1dc5666cd26bb9b8c37b1b7dd689d (patch) | |
tree | 7f76425ef73fdd11642b93a8b3ece8e49382488e /gcc/cp | |
parent | 9b53edc796d284b6adec7f2996772dbddf4c341e (diff) | |
download | gcc-00a2774923c1dc5666cd26bb9b8c37b1b7dd689d.zip gcc-00a2774923c1dc5666cd26bb9b8c37b1b7dd689d.tar.gz gcc-00a2774923c1dc5666cd26bb9b8c37b1b7dd689d.tar.bz2 |
c++: premature overload resolution redux [PR100078]
My patch for PR93085 didn't consider that a default template argument can
also make a template dependent.
gcc/cp/ChangeLog:
PR c++/100078
PR c++/93085
* pt.c (uses_outer_template_parms): Also look at default
template argument.
gcc/testsuite/ChangeLog:
PR c++/100078
* g++.dg/template/dependent-tmpl2.C: New test.
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/pt.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f488a5a..0f119a5 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10856,6 +10856,7 @@ uses_outer_template_parms (tree decl) for (int i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i) { tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i)); + tree defarg = TREE_PURPOSE (TREE_VEC_ELT (parms, i)); if (TREE_CODE (parm) == PARM_DECL && for_each_template_parm (TREE_TYPE (parm), template_parm_outer_level, @@ -10864,6 +10865,10 @@ uses_outer_template_parms (tree decl) if (TREE_CODE (parm) == TEMPLATE_DECL && uses_outer_template_parms (parm)) return true; + if (defarg + && for_each_template_parm (defarg, template_parm_outer_level, + &depth, NULL, /*nondeduced*/true)) + return true; } } tree ci = get_constraints (decl); |