
Eric Niebler
On 6/16/2010 3:04 AM, Alex Dubov wrote:
Greetings.
However, if functor is wrapped with assertion, this won't work:
sregex r = (expr)[check(do_something(p_string, _))];
Compilation will fail, because do_something has no method which accepts xpressive::placeholder<> objects.
It should if it is a lazy function. How is do_something defined? Can you send a self-contained program that demonstrates the problem you're having?
In the particular case I was working on, I was forced to stop on every match anyway, so I'm not using check() right now. I'll, however, try to recreate the problematic example to see if I keep encountering the problem.
In light of the above, I also thought about sort of feature request: 3. Sometimes, custom assertion applies only to a part of the match, something like:
*((expr)[check(cond)] | _)
That is, a desire is to consume everything, until some specific "expr" token matches a precondition.
Yes, that should work.
However, raised assertion will not stop the matching, because it only applies to one branch of the regexp. It could be very handy if there was a way to signal from assertion that a larger containing expression matched it results.
I don't understand that last sentence. Can you clarify?
I thought about something on the lines of: sregex large_expr(*((expr)[check(cond())] | _)); With cond() being able to use a statement <something>.set_matched(large_expr) to signal that "large_expr" as a whole can be considered matched for now.