diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 77583dd6bb52de8d35e4e4874e3471490715d546..39232b5e67fd8fb3d792a0b43ed2d84730d27927 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -4010,6 +4010,11 @@ find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data) &find_parameter_packs_r, ppd, ppd->visited); return NULL_TREE; + case TEMPLATE_PARM_INDEX: + if (parameter_pack_p) + WALK_SUBTREE (TREE_TYPE (t)); + return NULL_TREE; + case DECL_EXPR: { tree decl = DECL_EXPR_DECL (t); diff --git a/gcc/testsuite/g++.dg/cpp1z/variadic-nontype1.C b/gcc/testsuite/g++.dg/cpp1z/variadic-nontype1.C new file mode 100644 index 0000000000000000000000000000000000000000..ad2af623b1397d19eba3fec2d59fdac9c2264578 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/variadic-nontype1.C @@ -0,0 +1,18 @@ +// { dg-do compile { target c++17 } } +struct Class1 +{ + void apply_bool(bool){} + void apply_char(char){} +}; + +template<auto...Fn> struct Class2; +template<typename...P, void(Class1::*...Fn)(P)> struct Class2<Fn...> +{ + void apply(){} +}; + +int main() +{ + Class2<&Class1::apply_bool, &Class1::apply_char> class2; + class2.apply (); +}