Hi, folks!
This program suprises me by causing a runtime assertion:
=====
#include <string>
#include
using namespace boost::xpressive;
int main()
{
std::string x("a\tb\tc");
sregex_token_iterator cur(x.begin(), x.end(), as_xpr("\t"), -1),
end;
for(; cur != end; ++cur)
;
}
=====
...the assertion:
=====
suprise:
/usr/local/include/boost-1_35/boost/xpressive/detail/utility/tracking_ptr.hpp:196:
void boost::xpressive::detail::enable_reference_tracking<Derived>::release()
[with Derived =
boost::xpressive::detail::regex_impl<__gnu_cxx::__normal_iterator > >]:
Assertion `0 < this->cnt_' failed.
Aborted
=====
Changing the declarations like this causes it to work as I expect:
=====
sregex tab_delim(as_xpr("\t"));
sregex_token_iterator cur(x.begin(), x.end(), tab_delim, -1),
end;
=====
...maybe there's some "temporary" magic happening, or that I was just plain
doing something I shouldn't have been doing (silly me!), or both? Could anyone
comment on what's happening?
[Note: Boost 1.35, OpenSuSE 10.3, g++ 4.1.2]
Thanks!
_Jesse Williamson ;-};