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: [email protected]
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