poolの巻

boostを使うに当たって遭遇した問題について語るキーワードになる予定>とらぶるboost
まぁとらぶるなのはむしろVC6だとは思うんですが、それだと範囲がちょっと広いのでこんな名前に。ごめんなさいね>boostのえらい人たち
で、今回問題が発生したのは<boost/pool/pool.hpp>です。この中で、

#ifdef BOOST_NO_STDC_NAMESPACE
 namespace std { using ::malloc; using ::free; }
#endif

という部分があります。これは、既存のmallocとfreeを、std::mallocとstd::freeにしてしまえという文です。これらの関数は、ちょっと下にあるdefault_user_allocator_malloc_freeなる構造体(というか、名前空間に近い)で使われます。何がまずいかというと、別の場所でfreeとかmallocとか呼び出すと、オーバーロードが解決できないエラーが発生するからです。WTLコンパイルしてるときに引っかかりました。他にもmalloc/free使ってるソースをコンパイルしてエラーが出たら面倒なので、元を絶て!ってことで上記のnamespace...には消えてもらいました。と同時に下のほうで出てくるstd::free/mallocも、std::無しに改変。