https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103747
Bug ID: 103747 Summary: Passing parameter pack expansion to alias template with one argument fails as function return type Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: i...@ebner-markus.de Target Milestone: --- GCC: 11.2 / trunk CLANG: 13 The following code does not compile with GCC, but compiles fine with clang: https://godbolt.org/z/vP5YMKqKe #include <array> template<template <typename...> typename TClass, typename... TArgs> TClass<TArgs...> factory() { return TClass<TArgs...>(); } template<typename TItem> using FixedSize5Array = std::array<TItem, 5>; int main() { auto arr = factory<FixedSize5Array, int>(); return 0; } Changing the alias template to the following, makes the code compile with GCC, but not with clang: https://godbolt.org/z/r45Ydx65q template<typename... TItem> using FixedSize5Array = std::array<TItem..., 5>; To get it to compile with both compilers, take the first version, and replace the explicit return type of factory() with auto: https://godbolt.org/z/WjYrWbq18