In my implementation of P2082R1 I missed this piece: the aggregate deduction
candidate is not generated if the class has user-written deduction guides.
gcc/cp/ChangeLog:
PR c++/98802
* pt.c (do_class_deduction): No aggregate guide if any_dguides_p.
gcc/testsuite/ChangeLog:
PR c++/98802
* g++.dg/cpp1z/class-deduction78.C: New test.
}
}
- if (tree guide = maybe_aggr_guide (tmpl, init, args))
- cands = lookup_add (guide, cands);
+ if (!any_dguides_p)
+ if (tree guide = maybe_aggr_guide (tmpl, init, args))
+ cands = lookup_add (guide, cands);
tree call = error_mark_node;
--- /dev/null
+// PR c++/98802
+// { dg-do compile { target c++17 } }
+
+using size_t = decltype(sizeof(42));
+
+template<typename T, size_t N = 0>
+struct List {
+ T head;
+ List<T, N-1> tail;
+};
+
+template<typename T>
+struct List<T, 0> {};
+
+template<typename T> List(T) -> List<T, 1>;
+template<typename T, size_t N> List(T, List<T, N>) -> List<T, N+1>;
+
+int main() {
+ auto list2 = List{0, List{1, List{2}}};
+}