C ++ 11: Массив времени компиляции с глубиной логарифмической оценки

Один из способов реализации массива C ++ 11, элементы которого инициализируются функцией их индекса, рассчитанного компилятором, и результаты которого хранятся в разделе данных (.rodata) образа приложения, заключается в использовании шаблонов, частичной специализации и constexpr следующим образом:

#include 
#include 
using namespace std;

constexpr int N = 1000000;
constexpr int f(int x) { return x*2; }

typedef array A;

template constexpr A fs() { return A{{ f(i)... }}; }

template struct S;

template struct S
{ static constexpr A gs() { return fs(); } };

template struct S
{ static constexpr A gs() { return S::gs(); } };

constexpr auto X = S::gs();

int main()
{
        cout < X[3] < endl;
}

Ответы на вопрос(3)

Ваш ответ на вопрос