[xpressive] crash...

Hello Eric, this code fragment will crash, since 'what' uses iterators into the invalid string x::smatch what; if(x::regex_match(std::string(" (some_type_ptr) xyz,"), what, regex)) //string goes out of scope after this sentance { std::cout << what[0] << endl; // boom! string iterators are no longer valid std::cout << what[1] << endl; } May be there is a way to probit this kind of behaviour during the compilation or at least this can be stated in the docs... With Kind Regards, Ovanes

Ovanes Markarian wrote:
As I'm sure you know, this is an invalid use. It couldn't hurt to be explicit about it in the docs, though. FWIW, I once found a way to disallow code like this at compile time. This regex_match() overload takes a "std::string const &", which accepts temporaries. It could instead take a "std::string const volatile &" which would *not* bind to temporaries, and then I can cast away the volatile. But it seems like a dirty trick, so I haven't done it. -- Eric Niebler Boost Consulting www.boost-consulting.com

I now know that this is an invalid usage, after I know that 'smatch' is
based on iterators. Since 'smatch' does not encover in the docs what
internal structure it has, I did not conclude that it is based on iterators.
And a string const& as param does not mean for me, that this string should
be valid later on. May be I am wrong.
BTW: the trick with volatile does not work in MSVC 8.0 Express compiler. :(
Would be great if the upcoming standard would provide a temporary checking
facility ;)
Many thanks for the great lib and your time!
Ovanes
On 10/16/07, Eric Niebler

Ovanes Markarian wrote:
The docs are pretty explicit about smatch using iterators. See the section "Results Invalidation" here: http://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/boost_xpressive...
Yes, I know. It's a compiler bug. FYI, the next standard *does* provide a way to detect temporary objects. It's called "rvalue references".
Many thanks for the great lib and your time!
My pleasure. Thanks for the feedback. -- Eric Niebler Boost Consulting www.boost-consulting.com
participants (2)
-
Eric Niebler
-
Ovanes Markarian