This is the example from cppreference. I don't understand how the pattern get expanded.
template<typename ...Ts, int... N> void g(Ts (&...arr)[N]) {}
int n[1];
g<const char, int>("a", n); // Ts (&...arr)[N] expands to
// const char (&)[2], int(&)[1]
Note: In the pattern Ts (&...arr)[N], the ellipsis is the innermost element, not the last element as in all other pack expansions.
Question 1: what is arr?
Question 2: n is a int array, does it match to int...N?
Question 3: How come it can expand to const char (&)[2], int(&)[1]