Source: struct A { using CommonName = char; }; template <typename T, typename... CommonName> struct B { using V = typename T::CommonName; }; template struct B<A>; Output: <source>:7:37: error: parameter packs not expanded with '...': 7 | using V = typename T::CommonName; | ^ <source>:7:37: note: 'CommonName' Compiler returned: 1 Rejected by all GCC versions. Accepted by clang, msvc.
Another such situation: template<typename> struct any; template<typename T> using any_t = typename any<T>::type; template<typename... type> struct str { any_t<any_t<str<type...>>> func(); }; Changing `type` to something else, in either `any_t` or `str`, allows the code to compile. 5.1.0 accepts the code; 5.2.0 onward reject it. Possibly related to #61022.
Confirmed. https://godbolt.org/z/UuwYK4
*** Bug 100718 has been marked as a duplicate of this bug. ***
*** Bug 114491 has been marked as a duplicate of this bug. ***
*** Bug 116739 has been marked as a duplicate of this bug. ***
Another testcase which has the same issue with the clash from PR 116739: ``` template<class> struct l {}; template <class t> struct mm { using type = t; }; template <class t> class myclass { template <class... type> // error: parameter packs not expanded with '...': l<typename mm<t>::type> try_push(type&&... k); }; ```