https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97246
Bug ID: 97246 Summary: [10.1 regression] mismatched argument pack lengths Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: wjwray at gmail dot com Target Milestone: --- A deduced <typename... T> argument pack T... v now gives a "mismatched argument pack lengths" error for T... and v... i.e. static_assert( sizeof...(T) == sizeof...(v) ); // Fail !! Here's a sample, working on 9.3, rejected since 10.1 https://godbolt.org/z/oM9ve5 template <int... Is, typename T> T arg_T(decltype(Is)..., T, ...); template <int I, int... Is> inline constexpr auto get = []<typename... T>(decltype(Is)..., T... v, ...) { static_assert( sizeof...(T) == sizeof...(v) ); if constexpr ( sizeof...(T) == 1 ) return (v,...); else { using V = decltype(arg_T<__integer_pack(I)...>(v...)); return get<I,__integer_pack(I)...>.template operator()<V>(v...); } }; static_assert( get<0>('\0', short{1}, 2, long{3}) == 0 ); (Will try to simplify & post a reduced sample in a later comment). Note: the 'mismatched length' error shows when both T and v are used together e.g. with forwarding references <typename... T> : (T&&... v) : ((T&&)v...)