BOOST_SPIRIT_USE_LIST_FOR_TREES
マクロBOOST_SPIRIT_USE_LIST_FOR_TREESを定義した場合にコンパイルできない問題だけ修正しました。
差分
通常、Boost.Spiritの構文木は、
template<class T> struct tree_node { typedef std::vector<tree_node<T> > children_t; T value; children_t children; };
のような構造体で表現されますが、BOOST_SPIRIT_USE_LIST_FOR_TREESを定義してコンパイルすると、vectorの代わりにlistを使うようになります。
これでtree_node挿入時のメモリ再確保を防ぐことができるわけです。
が、結局list全体のコピーが頻繁に発生するので、Hamigaki.Bjamの実行時間はあまり違いがでませんでした。
COWベースのコンテナに差し替えれば速くなるかも。