diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-08-04 22:13:46 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-08-04 22:13:46 +0000 |
commit | 390f62dea36c3ba19429c312fc68557b82714be3 (patch) | |
tree | 8e3a23eb46d4d0af3f73a74c0c9be9bd1d6af91c | |
parent | 29587d84fb32032411a8006d8afd286e9b845442 (diff) | |
download | gcc-390f62dea36c3ba19429c312fc68557b82714be3.tar.gz |
/cp
2017-08-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/79790
* pt.c (do_class_deduction): Handle the case of no viable implicit
deduction guides; simplify the code generating implicit deduction
guides.
/testsuite
2017-08-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/79790
* g++.dg/cpp1z/class-deduction42.C: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@250882 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/pt.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 |
3 files changed, 19 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 041c6c44bbe..f4051080c93 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2017-08-04 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/79790 + * pt.c (do_class_deduction): Handle the case of no viable implicit + deduction guides; simplify the code generating implicit deduction + guides. + 2017-08-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/71440 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index ee4e6b11334..bd61438fc39 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -25452,11 +25452,7 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags, if (gtype) { tree guide = build_deduction_guide (gtype, outer_args, complain); - if ((flags & LOOKUP_ONLYCONVERTING) - && DECL_NONCONVERTING_P (STRIP_TEMPLATE (guide))) - elided = true; - else - cands = lookup_add (guide, cands); + cands = lookup_add (guide, cands); } } @@ -25467,6 +25463,12 @@ do_class_deduction (tree ptype, tree tmpl, tree init, int flags, "user-declared constructors", type); return error_mark_node; } + else if (!cands && call == error_mark_node) + { + error ("cannot deduce template arguments of %qT, as it has no viable " + "deduction guides", type); + return error_mark_node; + } if (call == error_mark_node) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4203037994d..c936479fbfb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-08-04 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/79790 + * g++.dg/cpp1z/class-deduction42.C: New. + 2017-08-04 Yury Gribov <tetra2005@gmail.com> PR tree-optimization/57371 |