にゃははー

はへらー

そのオプション、ほんとに必要ですか?

私はよく依存ライブラリとかで修行(自前ビルド)するんだが、その中でよくコンパイルエラーになるものがある。
リリースされてるものがエラーになるとか何事だと思いエラーログを見てみると、大抵gccの-Werrorオプションによるものだ。
-Werrorは警告をエラー扱いにするオプションで、厳密なソースを書きたかったらつけるようなものだが、警告が出る部分と言うのがgccのバージョン異存だったりするのでこういったオプションをつけるときはgccの挙動を熟知している必要がある。
今までにこれを食らった有名なOSSは多くて、たとえばFirefoxとかXenとか。

特にFirefoxとか酷かった。

class hoge
{
public:
    some_struct &foo( void ) const;
private:
    static const some_struct obj;
};

...

some_struct &hoge::foo( void ) const
{
    return const_cast< some_struct & >( obj );
}

ってコードがあって、hoge::objを参照してるのはこのhoge::foo()のみ。こいつは何がしたいんだ?
こんなのが大量にあって、こいつはC++を、ってかCすらわかってんのか?と。
でこれが警告出すことで自動的にエラーへ昇格。

こんなコードが世の中にあるとは末恐ろしい。もっとオプションとか考えて使ってほしい。-std=gnu++0xとか。