Eric Niebler wrote:
Eric Niebler wrote:
Ovanes Markarian wrote:
Hello Eric,
sorry for bothering. I use xpressive in the following context: <snip>
I can't get your code to compile. Please send a minimal and complete source file that demonstrates the problem.
After fiddling with your code a bit, I got it to compile, but I'm not seeing any assertions, exceptions or crashes. What version are you using?
Me again. I realized I wasn't seeing the problem because I hadn't put any strings in the vector over which you were iterating. When I do, I can reproduce the assert. This is not a bug in xpressive, it is a bug in your code. The problem is here: std::tr1::bind(&apply_regex, sem_separated, td::tr1::placeholders::_1) In this call to bind, you pass sem_separated to bind() *by value*. You return a regex_token_iterator, which holds a reference to the (temporary) regex object. When the temporary regex object goes away, the regex_token_iterators are left holding dangling references. The lifetime of a regex_token_iterator cannot exceed the lifetime of the regex it holds. If you change the code to ... std::tr1::bind(&apply_regex, std::tr1::ref(sem_separated), td::tr1::placeholders::_1) ... it works just fine. HTH, -- Eric Niebler Boost Consulting www.boost-consulting.com