Commit be2b93e6 by Jason Merrill Committed by Jason Merrill

* decl.c (cp_finish_decl): Don't change init for auto deduction.

From-SVN: r163896
parent 40013af7
2010-09-06 Jason Merrill <jason@redhat.com> 2010-09-06 Jason Merrill <jason@redhat.com>
* decl.c (cp_finish_decl): Don't change init for auto deduction.
* pt.c (fold_non_dependent_expr_sfinae): Split out from... * pt.c (fold_non_dependent_expr_sfinae): Split out from...
(fold_non_dependent_expr): ...here. (fold_non_dependent_expr): ...here.
(convert_nontype_argument): Use it. Take complain parm. (convert_nontype_argument): Use it. Take complain parm.
......
...@@ -5681,18 +5681,21 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, ...@@ -5681,18 +5681,21 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
auto_node = type_uses_auto (type); auto_node = type_uses_auto (type);
if (auto_node) if (auto_node)
{ {
tree d_init;
if (init == NULL_TREE) if (init == NULL_TREE)
{ {
error ("declaration of %q#D has no initializer", decl); error ("declaration of %q#D has no initializer", decl);
TREE_TYPE (decl) = error_mark_node; TREE_TYPE (decl) = error_mark_node;
return; return;
} }
if (TREE_CODE (init) == TREE_LIST) d_init = init;
init = build_x_compound_expr_from_list (init, ELK_INIT, if (TREE_CODE (d_init) == TREE_LIST)
tf_warning_or_error); d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
if (describable_type (init)) tf_warning_or_error);
if (describable_type (d_init))
{ {
type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node); type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
auto_node);
if (type == error_mark_node) if (type == error_mark_node)
return; return;
} }
......
2010-09-06 Jason Merrill <jason@redhat.com> 2010-09-06 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/auto19.C: New.
* g++.dg/template/sfinae25.C: New. * g++.dg/template/sfinae25.C: New.
* g++.dg/template/char1.C: Expect warning. * g++.dg/template/char1.C: Expect warning.
* g++.dg/template/nontype10.C: Likewise. * g++.dg/template/nontype10.C: Likewise.
......
// { dg-options -std=c++0x }
struct Explicit {
Explicit() = default; // Line 2
explicit Explicit(const Explicit&){}
} ex;
auto ex2(ex); // Line 6
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