_GLIBCXX_USE_WCHAR_T
id:Cryolite:20060312 さんのwchar_tネタについて調べてみました。
_GLIBCXX_USE_WCHAR_Tは<bits/c++config.h>で定義される(べき)マクロです。このファイルはconfigureスクリプトが吐き出します。
試しにソースをダウンロードして、configureしてみたところ、_GLIBCXX_USE_WCHAR_Tのテストにパスしてしまいました。
_GLIBCXX_USE_WCHAR_Tの定義される条件は、
- マクロWEOFが使用できる
- マクロWCHAR_MINとWCHAR_MAXが使用できる
- ISO Cの要求する全てのワイド文字関数が使用できる
です。マクロの名前に対して3番目の条件は厳しすぎるように思えますが、実際_GLIBCXX_USE_WCHAR_Tがオンの状態では多くのワイド文字関数が呼ばれます。
さて、_GLIBCXX_USE_WCHAR_Tがオフということは、これをビルドした環境では上の条件を満たしていなかったことになります。ダウンロードページをよく見ると、g++とMinGW Runtimeのリリース日は違うことが分かります。Currentのg++ビルド当時のMinGW Runtimeと見比べると、確かにワイド文字関数のサポートに違いがありました。これが原因のようです。
といわけで、解決方法は2つ、
- 最新のMinGW Runtimeでlibstdc++をビルドし直す
- Release Candidateのg++ 3.4.5を使う
お好きな方をどうぞ。