セマンティックアクションでBoost.Lambda

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

namespace qi = boost::spirit::qi;
using boost::lambda::_1;

template <class Expr>
bool parse(const std::string& s, const Expr& expr)
{
    std::string::const_iterator first = s.begin();
    return boost::spirit::qi::parse(first, s.end(), expr);
}

int main()
{
    parse("(123)", '(' >> qi::int_[ std::cout << _1 << '\n' ] >> ')');
}
123


# イテレータを書かないためにparse()を自作するのがめんどくさい。