+2015-10-25 Jason Merrill <jason@redhat.com>
+
+ DR 2179
+ * pt.c (process_partial_specialization): Handle error_mark_node
+ from most_specialized_partial_spec.
+
2015-10-23 Jason Merrill <jason@redhat.com>
DR 1518
: DECL_TEMPLATE_INSTANTIATION (instance))
{
tree spec = most_specialized_partial_spec (instance, tf_none);
- if (spec && TREE_VALUE (spec) == tmpl)
- {
- tree inst_decl = (DECL_P (instance)
- ? instance : TYPE_NAME (instance));
- permerror (input_location,
- "partial specialization of %qD after instantiation "
- "of %qD", decl, inst_decl);
- }
+ tree inst_decl = (DECL_P (instance)
+ ? instance : TYPE_NAME (instance));
+ if (!spec)
+ /* OK */;
+ else if (spec == error_mark_node)
+ permerror (input_location,
+ "declaration of %qD ambiguates earlier template "
+ "instantiation for %qD", decl, inst_decl);
+ else if (TREE_VALUE (spec) == tmpl)
+ permerror (input_location,
+ "partial specialization of %qD after instantiation "
+ "of %qD", decl, inst_decl);
}
}
--- /dev/null
+// DR 2179
+
+template <class T1, class T2> class A;
+template <class T> struct A<T, void> { void f(); };
+template <class T> void g(T) { A<char, void>().f(); } // #1
+template<typename T> struct A<char, T> {}; // { dg-error "" }
+A<char, void> f; // #2