#include <iostream>
#include <utility>
#include <array>
#include <cstddef>


template <typename F, std::size_t... I>
constexpr auto generate (F&& f, std::index_sequence<I...>) -> std::array<decltype(std::forward<F> (f) (0)), sizeof...(I)> {
	return {{ std::forward<F> (f) (I) ... }};
}

template <std::size_t S, typename F>
constexpr auto generate (F&& f) -> std::array<decltype(std::forward<F> (f) (0)), S> {
	return generate (std::forward<F> (f), std::make_index_sequence<S> {});
}

constexpr int myLutCalc (std::size_t index) {
	return index * 2;
}

constexpr auto myLUT = generate<10> (myLutCalc);

int main() {
	for (auto& x : myLUT) {
		std::cout << x << ", ";
	}
	std::cout << std::endl;
	return 0;
}