
2011/8/15
Hello,
if I execute the following example, I get the following output "The bad one The good one a" but I only expected "The good one a".
Why does it happens? Boost 1.47.0 was used.
#include
#include #include #include <iostream>
int main() { using boost::spirit::qi::char_; using boost::spirit::qi::parse;
char const *first = "{a}", *last = first + std::strlen(first);
parse(first, last, '{' >> char_("a")[std::cout << "The good one " << boost::lambda::_1 << '\n'] | char_("b")[std::cout << "The bad one " << boost::lambda::_1 << '\n']
'}');
return 0; }
Because (std::cout << "The good one ") & (std::cout << "The bad one ") are
not lambda expressions so they are executed immediately, and it seems
Boost.Lambda just happened to work here.
The corrected version would be:
#include