Intensificador do Boost Spirit com atributos herdados - exemplo simples não compilará

Eu estou tentando escrever um analisador para uma linguagem semelhante ao C com boost :: spirit que usa atributos herdados para transferir informações sobre o escopo de variável. Por exemplo, "namespace a {var b}" passaria "a" como um atributo para o analisador de "var b".

Estou tendo problemas para obter um analisador básico usando atributos herdados para compilar este código:

#ifndef CPARSER_DEF_HPP
#define CPARSER_DEF_HPP

#include <string>

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

namespace encoding = boost::spirit::ascii;
using boost::spirit::unused_type;
using boost::spirit::qi::rule;

template <typename Iterator>
struct cparser : boost::spirit::qi::grammar<
                    Iterator,
                    std::string(std::string),
                    encoding::space_type
                    >
{
    rule<Iterator, std::string(std::string), encoding::space_type> start;
    rule<Iterator, std::string(std::string), encoding::space_type> sym_list;

    cparser() :
        cparser::base_type(start)
    {
        sym_list         = encoding::string(boost::spirit::qi::_r1);
        start            = sym_list(boost::spirit::qi::_r1);
    }

};

#endif

Este analisador é instanciado em main () comcparser<std::string::const_iterator> parser.

Acredito que este analisador deva aceitar um std :: string como seu atributo herdado, parse input correspondendo a esta string, e então retorne a string como um atributo sintetizado. Este código de exemplo não compila e não consigo descobrir o porquê. Eu tenho compilado com o GCC e o Clang com o C ++ 11 ativado. A saída de qualquer um dos compiladores é enorme (aproximadamente 1.000 linhas), e não consigo fazer nenhum sentido. Existe algum problema com o uso deboost::spirit::qi::_r1? Um problema comstd::string(std::string) nas declarações de regra?

Agradeço antecipadamente por sua ajuda.

questionAnswers(1)

yourAnswerToTheQuestion