Commit f18ea1bf by Jason Merrill Committed by Jason Merrill

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
parent 9d2b7551
2010-05-17 Jason Merrill <jason@redhat.com> 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 PR c++/44157
* call.c (build_over_call): Limit init-list deduction warning to * call.c (build_over_call): Limit init-list deduction warning to
cases where the argument is actually an init-list. cases where the argument is actually an init-list.
......
...@@ -447,6 +447,7 @@ struct z_candidate { ...@@ -447,6 +447,7 @@ struct z_candidate {
indicated by the CONVERSION_PATH. */ indicated by the CONVERSION_PATH. */
tree conversion_path; tree conversion_path;
tree template_decl; tree template_decl;
tree explicit_targs;
candidate_warning *warnings; candidate_warning *warnings;
z_candidate *next; z_candidate *next;
}; };
...@@ -2573,6 +2574,7 @@ add_template_candidate_real (struct z_candidate **candidates, tree tmpl, ...@@ -2573,6 +2574,7 @@ add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
cand->template_decl = build_template_info (tmpl, targs); cand->template_decl = build_template_info (tmpl, targs);
else else
cand->template_decl = DECL_TEMPLATE_INFO (fn); cand->template_decl = DECL_TEMPLATE_INFO (fn);
cand->explicit_targs = explicit_targs;
return cand; return cand;
fail: fail:
...@@ -5692,7 +5694,10 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) ...@@ -5692,7 +5694,10 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
pattype = PACK_EXPANSION_PATTERN (pattype); pattype = PACK_EXPANSION_PATTERN (pattype);
pattype = non_reference (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", pedwarn (input_location, 0, "deducing %qT as %qT",
non_reference (TREE_TYPE (patparm)), non_reference (TREE_TYPE (patparm)),
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
PR c++/44157 PR c++/44157
* g++.dg/cpp0x/initlist34.C: New. * g++.dg/cpp0x/initlist34.C: New.
2010-05-17 Jason Merrill <jason@redhat.com>
PR c++/44158 PR c++/44158
* g++.dg/cpp0x/rv-trivial-bug.C: Test copy-init too. * g++.dg/cpp0x/rv-trivial-bug.C: Test copy-init too.
......
...@@ -9,4 +9,6 @@ void f(T) { } ...@@ -9,4 +9,6 @@ void f(T) { }
int main() { int main() {
std::initializer_list<int> a = { 0 }; std::initializer_list<int> a = { 0 };
f(a); f(a);
f<std::initializer_list<int> >({ 0 });
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment