* pt.c (fn_type_unification): Allow incomplete unification without
an immediate error message.
From-SVN: r18912
+Mon Mar 30 12:15:00 1998 Mark Mitchell <mmitchell@usa.net>
+
+ * pt.c (fn_type_unification): Allow incomplete unification without
+ an immediate error message.
+
Mon Mar 30 08:55:42 1998 Jason Merrill <jason@yorick.cygnus.com>
* tree.c (member_p): New fn.
fn_arg_types = scratch_tree_cons (NULL_TREE, extra_fn_arg,
fn_arg_types);
+ /* We allow incomplete unification without an error message here
+ because the standard doesn't seem to explicitly prohibit it. Our
+ callers must be ready to deal with unification failures in any
+ event. */
i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (fn),
targs,
fn_arg_types,
decl_arg_types,
explicit_targs,
- strict, 0);
+ strict, 1);
return i;
}
--- /dev/null
+// Build don't link:
+
+template <class T>
+struct S
+{
+ typedef T S_Type;
+};
+
+
+template <class T>
+void foo(typename S<T>::S_Type)
+{
+}
+
+
+template <class T>
+void foo(T)
+{
+}
+
+
+struct S2 {};
+
+void bar()
+{
+ foo(S2()); // We can't unify with the first foo, so we get the second.
+}