const配列をTMPで初期化して参照テーブル云々、失敗

const配列をTemplate Meta Programmingで初期化して参照テーブルにしたかった。

template<int N>
struct table {
    static const int value[N];
};

template<int N>
const int table<N>::value[N] = /*???*/;

int foo(int n)
{
    return table<10>::value[n];
}

みたいなことができたらいいなと。
c++ - Is it possible to create and initialize an array of values using template metaprogramming? - Stack Overflow
いろいろ変態的なやり方が紹介されているけど、const配列はやっぱ無理なのかなー

仕方ないから

#include <boost/preprocessor/repetition/enum.hpp>

template<int N>
struct table_impl {
    /*何らか初期化*/
    static const int value = N * N;    //例えば2乗とか
};

template<int N>
struct table {
    static const int value[N];
};
template<int N>
const int table<N>::value[N] = {
#define INIT_PRED(_1, n, _2) table_impl<n>::value
    BOOST_PP_ENUM(10, INIT_PRED, _)
#undef INIT_PRED
    };

int foo(int n)
{
    return table<10>::value[n];
}

プリプロセッサになってしまうか...