https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90098
Bug ID: 90098 Summary: [P0732] Partial specialization of a class template with variadic parameter pack fails Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mateusz.pusz at gmail dot com Target Milestone: --- Hi, Compiling the code provided below with the following options produces an error: "-std=c++2a -Wall -Wextra" ``` // works template<typename... Ts> struct X {}; template<typename T, typename... Rest> struct X<T, Rest...> {}; // works template<int... Is> struct Y {}; template<int I, int... Rest> struct Y<I, Rest...> {}; // error struct A { int value; // auto operator<=>(const A&) = default; }; template<A... Us> struct Z {}; template<A V, A... Rest> struct Z<V, Rest...> {}; ``` Error: <source>:25:8: error: partial specialization 'struct Z<((A*)(void)0)->A::__ct_comp (((const A)V)), (const A)Rest ...>' is not more specialized than [-fpermissive] 25 | struct Z<V, Rest...> {}; | ^~~~~~~~~~~~~ <source>:22:8: note: primary template 'template<A ...Us> struct Z' 22 | struct Z {}; | ^ <source>:25:8: error: template argument '((A*)(void)0)->A::__ct_comp (((const A)V))' involves template parameter(s) 25 | struct Z<V, Rest...> {}; | ^~~~~~~~~~~~~ <source>:25:8: error: template argument '(const A)Rest' involves template parameter(s) See also: https://godbolt.org/z/G96q1_. Best Mat