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

template <std::size_t ... Is>
constexpr std::array<std::uint16_t, sizeof...(Is)> mersenne_numbers(std::index_sequence<Is...>)
{
    return {{ ((1u << Is) - 1u)... }};
}

template <std::uint8_t N>
constexpr std::array<std::uint16_t, N> mersenne_numbers()
{
    return mersenne_numbers(std::make_index_sequence<N>{});
}

int main()
{
	constexpr auto ns = mersenne_numbers<5>();
    for (auto e : ns) {
        std::cout << e << " ";
    }
    std::cout << std::endl;
}
