Consider: template <typename...> struct p;
template <typename, typename> struct d; template <typename... A, typename... B> struct d<p<A...>, p<B...> > { typedef int t; }; typedef d<p<>, p<int, float> >::t q; typedef d<q, d<p<int>, p<float> >::t> r; // * typedef d<d<p<>, p<int, float> >::t, d<p<>, p<> >::t> s; // error: âtypedef int d<p<int>, p<float> >::tâ is inaccessible within this context The error makes no sense. In fact, it disappears if the unrelated line marked with an asterisk is removed. -- Summary: Bogus inaccessibility error on variadic partial template specialization. Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: gcc-bugzilla at contacts dot eelis dot net http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35784