summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-04 22:13:46 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-04 22:13:46 +0000
commit390f62dea36c3ba19429c312fc68557b82714be3 (patch)
tree8e3a23eb46d4d0af3f73a74c0c9be9bd1d6af91c
parent29587d84fb32032411a8006d8afd286e9b845442 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/cp/pt.c12
-rw-r--r--gcc/testsuite/ChangeLog5
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