Я пытаюсь скомпилировать приведенный ниже код, но, как обычно, ошибки с Spirit / Phoenix не дают много подсказок о том, что не так. Кто-нибудь может увидеть в чем проблема?
#include <boost/spirit/include/phoenix.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/shared_ptr.hpp>typedef boost::shared_ptr<int> sptr;struct bar
{
template <typename A> struct result
{
typedef sptr type;
};
template <typename A> sptr operator()(A) const
{
return sptr();
}
};boost::phoenix::function<bar> foo;void test()
{
namespace qi = boost::spirit::qi;
using qi::_val;
qi::rule
<
std::string::const_iterator,
sptr(),
boost::spirit::ascii::space_type
>
test_rule = qi::eps [ _val = foo() ];
}
Как сказал ildjarn, в призыве к foo отсутствует аргумент.
Других решений пока нет …