Commit 29bb9224 by Marek Polacek Committed by Marek Polacek

PR c++/88631 - CTAD failing for value-initialization.

	* typeck2.c (build_functional_cast): Try deducing the template
	arguments even if there are no arguments to deduce from.

	* g++.dg/cpp1z/class-deduction59.C: New test.

From-SVN: r267533
parent 5b81a980
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
* call.c (convert_for_arg_passing): Only give warnings with tf_warning. * call.c (convert_for_arg_passing): Only give warnings with tf_warning.
* typeck.c (convert_for_assignment): Likewise. * typeck.c (convert_for_assignment): Likewise.
PR c++/88631 - CTAD failing for value-initialization.
* typeck2.c (build_functional_cast): Try deducing the template
arguments even if there are no arguments to deduce from.
2019-01-01 Jakub Jelinek <jakub@redhat.com> 2019-01-01 Jakub Jelinek <jakub@redhat.com>
Update copyright years. Update copyright years.
......
...@@ -2147,10 +2147,19 @@ build_functional_cast (tree exp, tree parms, tsubst_flags_t complain) ...@@ -2147,10 +2147,19 @@ build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
} }
else if (!parms) else if (!parms)
{ {
/* Even if there are no parameters, we might be able to deduce from
default template arguments. Pass TF_NONE so that we don't
generate redundant diagnostics. */
type = do_auto_deduction (type, parms, anode, tf_none,
adc_variable_type);
if (type == error_mark_node)
{
if (complain & tf_error) if (complain & tf_error)
error ("cannot deduce template arguments for %qT from ()", anode); error ("cannot deduce template arguments for %qT from ()",
anode);
return error_mark_node; return error_mark_node;
} }
}
else else
type = do_auto_deduction (type, parms, anode, complain, type = do_auto_deduction (type, parms, anode, complain,
adc_variable_type); adc_variable_type);
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
PR c++/88612 - ICE with -Waddress-of-packed-member. PR c++/88612 - ICE with -Waddress-of-packed-member.
* g++.dg/warn/Waddress-of-packed-member1.C: New test. * g++.dg/warn/Waddress-of-packed-member1.C: New test.
PR c++/88631 - CTAD failing for value-initialization.
* g++.dg/cpp1z/class-deduction59.C: New test.
2019-01-02 Martin Sebor <msebor@redhat.com> 2019-01-02 Martin Sebor <msebor@redhat.com>
Jeff Law <law@redhat.com> Jeff Law <law@redhat.com>
......
// PR c++/88631
// { dg-do compile { target c++17 } }
template<class T = void>
class A { };
int main()
{
auto x = A();
auto x2 = A{};
A y;
}
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