constexpr 関数内ではローカルクラスが定義出来ない

実は勘違いしていた C++11 の仕様シリーズ。
タイトル通りなんですが、constexpr関数内ではローカルクラスを定義することは出来ません。

constexpr int
func(){
    // clang3.1 error: types cannot be defined in a constexpr function
    class X{};
    return 10;
}


そんな感じでこれをそのまま使うのはボツかなぁ…。
まぁ関数の外でクラス定義してしまえばいいんですが。
ちなみに gcc4.7 だと上記のコードでも問題なく動いてしまいます。

[おまけ]

ついでなので『constexpr でエラー出力』を clang3.1 でも試してみました。

[ソース]

struct error_division_by_zero{
    int operator()() const{ throw("division by zero"); }
};

constexpr int
division(int a, int b){
    return b == 0 ? error_division_by_zero()()
         : a / b;
}

int
main(){
    constexpr int x1 = division(4, 2);    // ok
    constexpr int x2 = division(4, 0);    // error
    return 0;
}

[出力]

main.cpp|14 col 19| error: constexpr variable 'x2' must be initialized by a constant expression
||     constexpr int x2 = division(4, 0);    // error
||                   ^    ~~~~~~~~~~~~~~
main.cpp|7 col 21| note: non-constexpr function 'operator()' cannot be used in a constant expression
||     return b == 0 ? error_division_by_zero()()
||                     ^
main.cpp|14 col 24| note: in call to 'division(4, 0)'
||     constexpr int x2 = division(4, 0);    // error
||                        ^
main.cpp|2 col 6| note: declared here
||         int operator()() const{ throw("division by zero"); }
||             ^
|| 1 error generated.

んーもうちょっとすっきりさせることが出来そうな感じがしますね。