gcc の STL を STLPort 5.0 に入れ替え

インストール自体は簡単。適当な場所にアーカイブを展開して、

sudo make -f gcc.mak clean install

できたら試しに次のコードをコンパイルしてみる。

#ifdef _DEBUG
#define  _STLP_DEBUG 1
#else
#undef   _STLP_DEBUG
#endif

#include <vector>

int main(void)
{
  std::vector<int> hoge;
  hoge.pop_back();

  return 0;
}

Release

g++ -pthread -L/usr/local/STLport-5.0/lib -I/usr/local/STLport-5.0/stlport/ -lstlport -O2

Debug

g++ -pthread -L/usr/local/STLport-5.0/lib -I/usr/local/STLport-5.0/stlport/ -lstlportstlg -D_DEBUG -ggdb -O

Release 版は実行すると無言で落ちる。が、Debug 版は STL の使いかたがまずいところを教えてくれる。STLPort の Debug mode は最高ですよ。

% ./a.out

/usr/local/STLport-5.0/stlport/stl/debug/_vector.h(326): STL error : Trying to extract an object out from empty container
/usr/local/STLport-5.0/stlport/stl/debug/_vector.h(326): STL assertion failure: !this->empty()
zsh: 12094 abort ./a.out