Deduce std::array size?
c++, c++14
Solution
C++17 `std::array` class template argument deduction (CTAD)
Starting with C++17, this new language feature is now used by the standard library and now allows us to omit the template types as well so that the following works:
main.cpp
#include <array>
int main() {
std::array a{1, 2, 3};
}
instead of `std::array<int, 3> a{1, 2, 3};`
Tested with:
g++ -ggdb3 -O0 -std=c++17 -Wall -Wextra -pedantic -o main.out main.cpp
If we set `-std=c++14` instead for example, it fails to compile with:
error: missing template arguments before ‘a’
Tested on Ubuntu 18.04, GCC 7.5.0.
Problem
In the following code: ``` template<size_t N> int b(int q, const std::array<int, N>& types) { int r = q; for (int t : types) { r = r + t; } return r; } int main() { b<2>(9, { 2,3 }); } ``` How can I avoid having to specify 2 in the call to b for N? Why can't this type be automatically deduced? With out it I get the error: 'b': no matching overloaded function found 'int b(int,const std::array &)': could not deduce template argument for 'N'