Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2008年05月22日]

もしかしてSTL or Boostの……バグ?

2008年05月22日 20:30更新 筆者:K.Ktouth

先日の日記の通り、現在C++でプログラムを組んでいるわけですが、先人の知恵に習い「-Wall」(警告レベルを最大にする)をつけてコンパイルしています。
さて、その状態で以下のコードをコンパイルすると警告が出ます。

#include <iostream>
#include <boost/format.hpp>
int main() {
 std::cout << "sample is " << boost::format("test %1%:%2$04d") % "big" % 25 << std::endl;
 return 0;
}

これでコンパイルすると、なぜかSTLの内部で「'__cur'が初期化されていない」という警告が発生します。上記コードやboost::format周りで登場する変数名ではありません。あくまでもSTL内部で登場する変数です。
該当するのはcygwin版gnu c++ 3.4.4のSTLで、警告の出る行の実際のコードは

_ForwardIterator __cur = __result;

こうなっています。初期化されているように見えるんですが……テンプレートの固まりであるSTLとBoostの合わせ技です。もはや何が何だか。

一応いろいろ検索してみたものの、ポンと出てくるようなレベルなら当然もっと前に改善しているでしょう……出てきません。一つだけ、英語ですがまさしくそれだろうという感じのバグ報告を見つけましたが、それに対する返答もなく、まさに途方に暮れてます。
その報告を見る限りは、GCC3.4.4固有のバグで動作に支障ない……なのですが、あらゆる警告を出さないように設計したいのに、自分のコード外の部分でこういう変な現象が起こるとひたすら困るんですよ……あせ

どーすべか。
cygwin標準のg++とboostを使ってるけど、いっそboostだけでも最新版に変えてみようかなぁ……もしかすると直るかも。

本日のリンク元
アンテナ
その他のリンク元
検索