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.
This commit is contained in:
parent
9b53edc796
commit
00a2774923
2 changed files with 15 additions and 0 deletions
|
@ -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);
|
||||
|
|
10
gcc/testsuite/g++.dg/template/dependent-tmpl2.C
Normal file
10
gcc/testsuite/g++.dg/template/dependent-tmpl2.C
Normal file
|
@ -0,0 +1,10 @@
|
|||
// PR c++/100078
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template <bool> struct enable_if;
|
||||
template <typename Data> struct HashMapBucket {
|
||||
template <typename T = Data>
|
||||
static typename enable_if<T ::value>::type selectStructure() {
|
||||
selectStructure();
|
||||
}
|
||||
};
|
Loading…
Add table
Reference in a new issue