@@ -4619,6 +4619,9 @@ process_partial_specialization (tree decl)
/* If we aren't in a dependent class, we can actually try deduction. */
else if (tpd.level == 1
+ /* FIXME we should be able to handle a partial specialization of a
+ partial instantiation, but currently we can't (c++/41727). */
+ && TMPL_ARGS_DEPTH (specargs) == 1
&& !get_partial_spec_bindings (maintmpl, maintmpl, specargs))
{
if (permerror (input_location, "partial specialization %qD is not "
new file mode 100644
@@ -0,0 +1,22 @@
+// PR c++/41727
+
+struct tag0;
+
+template < class Tag > struct outer
+{
+ template < typename Arg0, typename Arg1 > struct inner;
+};
+
+template < int Value > struct value_wrap { };
+
+template </* class Tag */>
+template < typename Arg0, int Arg1 >
+struct outer <tag0 >::inner < Arg0, value_wrap < Arg1 > >
+{
+ typedef Arg0 type;
+};
+
+typedef outer < tag0 >
+::inner < tag0, value_wrap < 999 > >
+::type // { dg-bogus "incomplete" "" { xfail *-*-* } }
+ outer_inner_type;