Hello, This is my first time using boost and spirit. I am trying to find construct a tree from a string input. While parsing I am trying to assign each created node a number. For this purpose I am using a inherited attribute, an integer reference. But when I check on the values assigned. It is not the value of the integer reference rather some other value (some consistent value). I am sure this must be something that I am overlooking. But I am not sure what exactly. Thanks for your help, Anand Kumar. Code: struct node; struct term { bool visited; int cnt; int val; term(bool b = false, int cn = -1, int v = numeric_limits<int>::min()) { visited = b; cnt = cn; val = v; } }; BOOST_FUSION_ADAPT_STRUCT( ::term, (bool, visited) (int, cnt) (int, val) ) typedef boost::variant<term, boost::recursive_wrapper<node>> node_impl; struct node { bool visited; int cnt; vector<node_impl> children; }; BOOST_FUSION_ADAPT_STRUCT( ::node, (bool, visited) (int, cnt) (std::vector<::node_impl>, children) ) template<typename Iterator> struct node_parser : qi::grammar<Iterator, node(), ascii::space_type> { qi::rule<Iterator, node(), ascii::space_type> start_r; qi::rule<Iterator, node(int&), ascii::space_type> node_r; qi::rule<Iterator, node_impl(int&), ascii::space_type> node_impl_r; node_parser() : node_parser::base_type(start_r) { using qi::int_; using qi::lexeme; using namespace qi::labels; using phoenix::ref; int cnt = 990; start_r %= node_r(phoenix::ref(cnt)); node_r = ('{' >> +node_impl_r(_r1) >> '}') [at_c<0>(_val) = false, at_c<1>(_val) = _r1++, at_c<2>(_val) = _1]; node_impl_r = ((lexeme['(' >> int_ >> ')'])[_val = phoenix::construct<term>(phoenix::val(false), _r1++, _1)]) | (node_r(_r1)[_val = _1]); } };