incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: STDCXX-600
Date Wed, 23 Jul 2008 23:46:53 GMT
Eric Lemings wrote:
>  
> FYI-type stuff.
> 
> I've been at this issue for the past couple hours.  Here's what I've
> found so far.
> 
> My basic test case looks like this:
> 
> #include <exceptions>
> #include <stdexcept>
>  
> int main () {
>     try {
>         // throw statement (see below)
>     } catch (std::exception&) {
>     } catch (...) {
>     }
> 
>     return 0;
> }
> 
> The following "throw statements" all throw exceptions that are not
> getting caught by the compiler's runtime libraries:
> 
> a.	_RW::__rw_throw (_RWSTD_ERROR_OUT_OF_RANGE, _RWSTD_FUNC
> ("main()"), 1, 0);
> b.    _RW::__rw_throw_proc (_RWSTD_ERROR_OUT_OF_RANGE, "what");
> 
> No clue yet why they are not caught.
> 
> The following "throw statement" however is caught properly:
> 
> c.    char* what = "what"; throw (_STD::out_of_rang&)_STD::out_of_range
> ()._C_assign (what, 0);

Have you tried changing this to something like:

     _STD::out_of_range ex;
     ex._C_assign (what, 0);
     throw ex;

Martin

> 
> Both of the first throw statements ultimately call the last throw
> statement so my current guess is that the problem has something to do
> with the internal what buffer.
> 
> Brad.


Mime
View raw message