re PR c++/79790 ([C++17] ICE class template argument deduction failed)
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 4 Aug 2017 22:13:46 +0000 (22:13 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 4 Aug 2017 22:13:46 +0000 (22:13 +0000)
/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.

From-SVN: r250882

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog

index 041c6c4..f405108 100644 (file)
@@ -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
index ee4e6b1..bd61438 100644 (file)
@@ -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)
     {
index 4203037..c936479 100644 (file)
@@ -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