Opened 11 years ago
Closed 11 years ago
#6343 closed Bugs (invalid)
Spirit::qi semantic action destroys attribute value
| Reported by: | Owned by: | Joel de Guzman | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | spirit |
| Version: | Boost 1.48.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
Long story short. This code:
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <string>
#include <vector>
void f(){return;}
int main()
{
namespace qi = boost::spirit::qi;
namespace ns = boost::spirit::ascii;
qi::rule<std::string::iterator,std::vector<int>(),ns::space_type> ex;
ex = qi::int_[f] >> *ex;
std::string str = "3 1 4 1 5 9";
std::vector<int> out;
if(qi::phrase_parse(str.begin(),str.end(),ex,ns::space,out))
{
std::cout << "Result: ";
BOOST_FOREACH(int d , out) std::cout << d << " , ";
std::cout << "\n";
}
}
Doesn't change the contents of the "std::vector<int> out".
If I remove the semantic action:
ex = qi::int_ >> *ex;
Then everything goes as expected.
Note:
See TracTickets
for help on using tickets.

When a semantic action is present anywhere in a rule, automatic attribute propagation is disabled. If you want to force attribute propagation, you can use the %= operator:
BTW, the proper forum for support is the Spirit mailing lists: http://boost-spirit.com/home/feedback-and-support/. Please ask the list first before flagging this as a bug here.