Можно ли инициализировать статический массив алгоритмом?
В C++14 для этого есть constexpr-функции:#include <iostream>
#include <array>

template<typename T, size_t n>
constexpr T& at(std::array<T, n>& a, size_t i) {
    return const_cast<T&>(static_cast<const std::array<T, n>&>(a)[i]);
}

template<typename T, size_t n>
constexpr const T& at(const std::array<T, n>& a, size_t i) {
    return a[i];
}

constexpr std::array<int, 20> generate_fib() {
    auto result = std::array<int, 20>{};
    for (size_t i = 0; i < 20; ++i) {
        if (i < 2) {
            at(result, i) = 1;
        } else {
            at(result, i) = at(result, i-1) + at(result, i-2);
        }
    }
    return result;
}

constexpr static const auto fib = generate_fib();

int main()
{
    for (auto elem : fib) {
        std::cout << elem << ' ';
    }
    return 0;
}Скомпилировать онлайн на GCC6.
Ограничения:В C++14 не предусмотрели constexpr для std::array::operator[]. Обещают исправить в C++17, а пока имеем костыль в виде функции at.Ни одна из текущих версий Visual Studio не способна скомпилировать данный код. M$ не дружит с constexpr.
Что мешает написать ф-цию?