読者です 読者をやめる 読者になる 読者になる

ボレロ村上 - ENiyGmaA Code

中3女子です。

Boost にバグ報告を投げたい

先日の記事でも書いたが、Boost 1.46.0 現在でも修正されていない小さなバグが2つある。
ライブラリは Boost.Wave と Boost.PropertyTree である。


Tickets を検索してみた限りでは、同じような報告は見つからなかった。
この2つのバグについて、僕は新しい Ticket として投稿しようと思う。


ひとまず報告したい内容をこのブログに書きます。
何しろ、バグ報告を投げた経験も殆ど無いし、英語力の問題もあって正直手探りです。
他に記載すべき情報や、文章の書き方、突っこみなどあれば言ってくださるとありがたいです。




VC8 〜 VC10 で確認。


より先に
をインクルードするとコンパイルエラーになる。

    • 再現コード
#include <boost/utility/value_init.hpp>
#include <boost/wave/util/cpp_include_paths.hpp>


原因は、boost/wave/util/cpp_include_paths.hpp で書かれている get 関数が、
意図に反して boost::get(boost::value_initialized&) を実体化しているためである。


以下に、問題のコードと修正コードを示す。

    • boost/wave/util/cpp_include_paths.hpp (186)
        return get<from>(pragma_once_files).find(filename) != pragma_once_files.end();

        return boost::multi_index::get<from>(pragma_once_files).find(filename) != pragma_once_files.end();
    • boost/wave/util/cpp_include_paths.hpp (202)
        get<to>(pragma_once_files).erase(r.first, r.second);

        boost::multi_index::get<to>(pragma_once_files).erase(r.first, r.second);


VC8 〜 VC10 で確認。


をインクルードするより先に
boost::property_tree::detail::rapidxml から見えるスコープに
alloc_func という型名が宣言されているとコンパイルエラーになる。

    • 再現コード
struct alloc_func;
#include <boost/property_tree/detail/rapidxml.hpp>


原因は、boost/property_tree/detail/rapidxml.hpp で書かれている alloc_func の typedef を、
VC++ コンパイラが解析できないためである。


以下に、問題のコードと修正コードを示す。

    • boost/property_tree/detail/rapidxml.hpp (370)
        typedef void *(alloc_func)(std::size_t);       // Type of user-defined function used to allocate memory

        typedef void *pvoid;
        typedef pvoid (alloc_func)(std::size_t);       // Type of user-defined function used to allocate memory

または

        typedef BOOST_DEDUCED_TYPENAME mpl::identity<void*>::type (alloc_func)(std::size_t);       // Type of user-defined function used to allocate memory