aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-05-17 15:54:05 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-05-17 15:54:05 -0400
commitf18ea1bfdbb4f130ed5ba2a7df5b42c9b101001c (patch)
tree7f7143c2ae4898fe52ad327b52412cd721f942de /gcc/cp
parent9d2b7551cded29cd7eaa87ed8ceb5c01f9e022aa (diff)
downloadgcc-f18ea1bfdbb4f130ed5ba2a7df5b42c9b101001c.zip
gcc-f18ea1bfdbb4f130ed5ba2a7df5b42c9b101001c.tar.gz
gcc-f18ea1bfdbb4f130ed5ba2a7df5b42c9b101001c.tar.bz2
call.c (struct z_candidate): Add explicit_targs field.
* call.c (struct z_candidate): Add explicit_targs field. (add_template_candidate_real): Set it. (build_over_call): Use it to control init-list warning. From-SVN: r159510
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/call.c7
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6a7a824..f6515f7 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2010-05-17 Jason Merrill <jason@redhat.com>
+ * call.c (struct z_candidate): Add explicit_targs field.
+ (add_template_candidate_real): Set it.
+ (build_over_call): Use it to control init-list warning.
+
PR c++/44157
* call.c (build_over_call): Limit init-list deduction warning to
cases where the argument is actually an init-list.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 46779fa..97a196b 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -447,6 +447,7 @@ struct z_candidate {
indicated by the CONVERSION_PATH. */
tree conversion_path;
tree template_decl;
+ tree explicit_targs;
candidate_warning *warnings;
z_candidate *next;
};
@@ -2573,6 +2574,7 @@ add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
cand->template_decl = build_template_info (tmpl, targs);
else
cand->template_decl = DECL_TEMPLATE_INFO (fn);
+ cand->explicit_targs = explicit_targs;
return cand;
fail:
@@ -5692,7 +5694,10 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
pattype = PACK_EXPANSION_PATTERN (pattype);
pattype = non_reference (pattype);
- if (!is_std_init_list (pattype))
+ if (TREE_CODE (pattype) == TEMPLATE_TYPE_PARM
+ && (cand->explicit_targs == NULL_TREE
+ || (TREE_VEC_LENGTH (cand->explicit_targs)
+ <= TEMPLATE_TYPE_IDX (pattype))))
{
pedwarn (input_location, 0, "deducing %qT as %qT",
non_reference (TREE_TYPE (patparm)),