にゃははー

はへらー

GCC4.6.0のinternal compiler error

ついにconstant expressionがサポートされたGCCですが、一連の更新で多くのバグが混入しているようです。
ということで発見したもの例によってGCCのバグレポは見てないし、書いてないので既出かも。


P-stade.Ovenを使ってたら発見。今回はどうしたらいいんだろ...
今回はinternal compiler errorということで結構深刻?

struct hoge
{
    int fuga;
};

template < typename >
void piyo( void )
{
    &hoge::fuga;
}

template + complete typeのメンバへのポインタがミソっぽいです。templateを外しても、struct hogeをpiyoの内部で定義しても通ります。

これが該当するのはpstade/radish/safe_bool.hppです。
pstade/oven/make_range.hppとかpsade/oven/iter_range.hppあたりからインクルードされてるのでいろいろ使えなくなってます。

大学の課題に使ってるから困る...

2010/11/24 追記
workaroundを発見
ワンクッションおけばいいみたい。

struct hoge
{
    int fuga;
};

inline int hoge::* get_mem_ptr( void )
{ return &hoge::fuga; }

template < typename >
void piyo( void )
{
    get_mem_ptr();
}