This was breaking because when we stripped the 't' typedef in s<t<Args>...>
to be s<Args...>, the TYPE_MAIN_VARIANT of "Args..." was still
"t<Args>...", because type pack expansions are treated as types. Fixed by
using the right function to copy a "type".
PR c++/99445
PR c++/103769
gcc/cp/ChangeLog:
* tree.cc (strip_typedefs): Use build_distinct_type_copy.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/variadic-alias5.C: New test.
Ts pack, resulting in an error. */
if (type != pat && uses_parameter_packs (type))
{
- result = copy_node (t);
+ result = build_distinct_type_copy (t);
PACK_EXPANSION_PATTERN (result) = type;
}
}
--- /dev/null
+// PR c++/103769
+// { dg-do compile { target c++11 } }
+// { dg-additional-options "--param=hash-table-verification-limit=1000" }
+
+template <typename T> using t = T;
+template <typename...> struct s {};
+template <typename...Args> s<t<Args>...> f() { return {};}
+
+int main() { f<void>(); }