Why is constexpr required even though member function is constexpr?
c++, c++11, constexpr, initializer-list
Solution
std::initializer_list<int> il = rand() ? std::initializer_list<int>{1}
: std::initializer_list<int>{1,2,3};
std::array<int, il.size()> a;
That's why.
A `constexpr` member function is a function that can be executed within a constant expression, it doesn't necessarily yield a result that is a compile-time constant. For example:
struct S
{
int m;
constexpr int foo() const { return m; }
};
S s{rand()};
int j = s.foo(); // only known at run-time
constexpr S cs{42};
int arr[cs.foo()]; // compile-time constant
Problem
The following does not compile unless I put constexpr before initializer_list: ``` constexpr std::initializer_list<int> il = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::array<int, il.size()> a; ``` But initializer_list size is constexpr: ``` constexpr size_type size() const; ```