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::無しに改変。