GCC 4.4時代のC++プログラミング(C++プログラマーの受難な日々の巻)
C++プログラマーや各ディストリビューションのパッケージメンテナーは必見。GCC 4.4 + glibc 2.10でハマらない為のテクニック。
詳しくはリンク先を参照。執筆者は今のGentoo界を牽引する我らがリーダー、Diego E. “Flameeyes” Petten〓先生。
Flameeyes's Weblog : How _not_ to fix GCC 4.4 bugs
ざっくり要約
#include <cstring> int main() { char *foo = strchr("ciao", 'a'); }
は、GCC 4.3までは問題ないが、GCC 4.4だとエラーになるぜ。
error: invalid conversion from ‘const char*’ to ‘char*’
でも決してこんな対策はすんな。目をつぶってるだけだ。
#include <cstring> int main() { char *foo = (char*)strchr("ciao", 'a'); }
で、こうするのがいいんだが、
#include <cstring> int main() { const char *foo = strchr("ciao", 'a'); }
constになっちまうのは困るんだろ?じゃあこうだ。
#include <cstring> int main() { char *foo = const_cast<char*>(strchr("ciao", 'a')); }
現時点でその影響が判明しているソフトウェア
で、Gentoo界ではFlameeyes先生が調査しまくってて各所で絶賛対応中。
次の日本発(?)系ソフトウェアでも影響があることが判明している。
- canuum
- ochusha
- scim-bridge
- w3mmee
まだまだ他にもたくさんありそうだ。恐ろしや。
GCC 4.3も落とし穴があって大変だった*1が、GCC 4.4もパッケージメンテナー泣かせ。C++プログラマーの皆様、お願いだからしっかりきっちり書いてね。またはC++を使わないでくれ。
*1:ちゃんと#include