http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46394
--- Comment #4 from Dodji Seketeli <dodji at gcc dot gnu.org> 2011-01-04 15:32:53 UTC --- I think what's happening is, at some point during template parameters fixup (to build proper canonical types for dependent parms) we try to substitute the U template parameter pack [and the the remaining unamed template parm] into the pattern of the default argument std::remote_reference<U>::type... . The TYPENAME_TYPE case of tsubst then logically calls tsubst_aggr_type on 'std::remote_reference<U>'. That later function in turn calls lookup_template_class with std::remote_reference as argument to D1 and a TYPE_PACK_EXPANSION built for the template parameter U (by template_parm_to_arg) and argument to ARGLIST. At that point we are trying to match a template argument which is a pack expansion with a template parameter that is not a parameter pack - and we hit http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35722. So I think I am going to focus on that bug and see.