Spirit.QiのSemanticActionではまった(というかPhoenix)

#include <iostream>
#include <string>
#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;

int main()
{
    std::string const   data =  "0.123670";
    unsigned int        result = 0;

    using ascii::space_type;
    using qi::_val;
    using qi::_1;
    using qi::_2;

    typedef std::string::const_iterator Iterator;

    typedef qi::rule<Iterator, unsigned int(), ascii::space_type>   x_rule_t;
    x_rule_t            xvalue_;

    xvalue_ %= (qi::uint_ >> qi::omit['.'] >> qi::uint_)[_val = (qi::_1 * 1000000u + qi::_2)]; //(1)

    Iterator beg = data.begin();
    bool const r = qi::phrase_parse(beg, data.end(), xvalue_, ascii::space, result);
    if(r) { 
        std::cout << "read : " << result << std::endl;
    } else {
        std::cout << "error : " << std::string(beg, data.end()) << std::endl;
    }
}

浮動小数点以下6桁の固定小数点数を整数にして読み込みしようとこんなコード書いたんですが、(1)の所でエラーが出まして、よく分からなかったんですが、

#include <boost/spirit/include/phoenix_operator.hpp>

すれば行けました。

QiだけインクルードしておけばPhoenixも全部使えるかなーと思ってたんですが、ちゃんとPhoenixの機能を使おうと思うと、そっちのヘッダもインクルードする必要があったのですねー・・・