PR c++/67152
* pt.c (process_partial_specialization): Call
associate_classtype_constraints.
From-SVN: r226739
2015-08-08 Jason Merrill <jason@redhat.com>
+ PR c++/67152
+ * pt.c (process_partial_specialization): Call
+ associate_classtype_constraints.
+
PR c++/67159
* constraint.cc (finish_template_introduction):
SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT.
/* We didn't register this in check_explicit_specialization so we could
wait until the constraints were set. */
decl = register_specialization (decl, maintmpl, specargs, false, 0);
+ else
+ associate_classtype_constraints (type);
DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
= tree_cons (specargs, tmpl,
--- /dev/null
+// PR c++/67152
+// { dg-options -std=c++1z }
+
+template <class T>
+concept bool HasType = requires { typename T::type; };
+
+template<class T>
+struct trait {
+ using type = void;
+};
+
+struct has_type { using type = void; };
+
+// Instantiation here
+trait<has_type>::type foo() {}
+
+// constrained version here. Type "has_type" would fail this
+// constraint so this partial specialization would not have been
+// selected.
+template<class T>
+ requires !HasType<T>
+struct trait<T> {
+ using type = void;
+};