type info of exception

O

Old Wolf

Is it possible to portably get the typename of an exception
that occurred?

I noticed when an uncaught exception occurred, GCC (3.4.1)
displayed:

terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid

So I tried:

catch(std::exception &e) {
std::cerr << "[E] Exception (" << typeid(e).name()
<< ") thrown: " << e.what() << std::endl;
}
but got output:
[E] Exception (St11logic_error) thrown:
basic_string::_S_construct NULL not valid

ie. it said St11logic_error instead of std::logic_error. Do
I have to try using a compiler-specific unmangling function?
 
V

Vladimir Ciobanu

Old Wolf said:
that occurred?

I noticed when an uncaught exception occurred, GCC (3.4.1)
displayed:

terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid

So I tried:

catch(std::exception &e) {
std::cerr << "[E] Exception (" << typeid(e).name()
<< ") thrown: " << e.what() << std::endl;
}
but got output:
[E] Exception (St11logic_error) thrown:
basic_string::_S_construct NULL not valid

ie. it said St11logic_error instead of std::logic_error. Do
I have to try using a compiler-specific unmangling function?

In the C++ standard, under 18.5.1[8], the return of
std::type_info::name() is
implementation-defined. This means that some compilers might chose to
return
"std::logic_error", some might have some specific mangled name for it
(such as
it is in your case) or some might even return an empty string.

Vladimir Ciobanu
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top