Daryle,
There's a problem with the previous line. You can't dereference "p" if you're at the end, but you don't prevent it.
Point taken. Here's the modified part: for(;;) { try { if( p == ctx.end() ) break; The only detected change is in the version that preserves the last_known_good: there is now an extra empty line after "barfoo1" in both cases. Incorrect processing of #define did not go away (EOL still consumed and not returned).
Looking at this, I still don't see how you avoid reading the problem context element over and over....
Heh! My point exactly! Yet it is not being read over and over and the difference between preserving and restoring the iterator and simply ignoring the exception is cosmetic as far as results are concerned. Looks like I'll have to dig through Hartmut's code to see for myself whether I can achieve what I want with the current version or forget it and wait for ??? next one. Regards, ...Max...