C++の非staticなconstなメンバー配列を初期化する方法

constなメンバーなので初期化リストで初期化せざるを得ない。C++11より前だとできないのだろうか。C++11なら統一的な初期化構文を使えばできる。

class foo {
    int a[3];
public:
    foo(): a{ 0, 1, 2 } {}
};

初期値が定数じゃない場合は、こんな感じ?

class foo {
    int a[3];
    static int init(int n) { ... }
public:
    foo(): a{ init(0), init(1), init(2) } {}
};

配列をまとめて初期化することはできないだろうか。できるなら、initはどういう型になるんだろう?

class foo {
    int a[3];
    static ??? init() { ... }
public:
    foo(): a(init())) {}
};

わかったらまた書きます。今日はできないこととわからないことだけでした。