enum の前方宣言

VC2010 は enum class に対応してなくてがっかり、と思いきや、enum の前方宣言が可能なようだ。
しかも


enum HOGE_RESULT;    // 前方宣言ではサイズ指定子を使用できず、デフォルト(int 型サイズ)のサイズとなる
// この↓で HOGE_RESULT を戻り値にするような関数を用いる
class Hogehoge
{
    HOGE_RESULT testHoge(void);
};


#inlucde "hogeUtility.h"
#inlucde "hogehoge.h"
HOGE_RESULT testHoge(void)
{
    return HOGE_RESULT_OK;
}


typedef enum HOGE_RESULT : int    // ここのサイズ指定子はデフォルトと同じ必要がある
{
    HOGE_RESULT_OK = 0,
    HOGE_RESULT_NG = -1,
}

で前方宣言が完了するお手軽さ。
※サイズ指定子を使う場合は 32 バイトじゃないと別定義扱いになるので注意


調べてみたら 2005 の時点で対応してたらしい。……全然知らなかったのでショック。
で、↑のやり方は VC の独自拡張だけど、他のコンパイラも対応してたりするらしい。
コンパイラの仕様関連ももっと勉強せんとあかんなぁ……。