Deduce template argument for size of initializer list

c++, c++14, initializer-list, template-argument-deduction

Solution

Thanks to core issue 1591, you can use

template <std::size_t N>
void foo( int const (&arr)[N] )
{
  // Code, where "N" is used.
}

foo({1, 2, 3});

Problem

I have the following (not compilable) code: ``` template< size_t N > void foo( std::array<int, N> ) { // Code, where "N" is used. } int main() { foo( { 1,2 } ); } ``` Here, I want to pass an arbitrary number of `int`s to a function `foo` -- for convenience, I will use the `std::initializer_list` notation. I tried to use an `std::array` to aggregate the `int`s (as shown in the code above), however, the compiler can not deduce the array size since the `int`s are passed as an `std::initializer_list`. Using an `std::initializer_list` instead of an `std::array` also does not solve the problem since (in contrast to `std::array`) the size of the `std::initializer_list` is not captured as template argument. Does anyone know which data structure can be used so that the `int`s can be passed by using the `std::initializer_list` notation and without passing the template argument `N` of `foo` explicitly? Many thanks in advance

Original source