Throwing std::ios_base::failure on formatted input with gcc 6.2
Edward Diener
eldlistmailingz@tropicsoft.com
Wed Oct 26 16:47:00 GMT 2016
On 10/26/2016 10:57 AM, Jonathan Wakely wrote:
> On 26 October 2016 at 14:42, Edward Diener wrote:
>> I am missing the syntactical difference between the two. There is
>> 'std::ios_base::failure' and how do you specify the other one ? Your
>> notation of 'std::ios_base::[abi:__cxx11]failure' I do not understand.
>>
>
> It comes from the abi_tag attribute documented at
> https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html
>
> namespace std {
> struct ios_base {
> struct __attribute__((abi__tag__("cxx11"))) failure { };
> };
> }
>
> I got the demangled name slightly wrong, the attribute goes at the end:
>
> #include <iostream>
> int main()
> {
> throw std::ios_base::failure("");
> }
> terminate called after throwing an instance of
> 'std::ios_base::failure[abi:cxx11]'
> what(): : iostream error
> Aborted (core dumped)
I am syntactically catching 'std::ios::failure'. Are you saying that the
exception being thrown in my OP is actually
'std::ios_base::failure[abi:cxx11]' ? I am still a bit confused when you
said in a previous reply:
"You're trying to catch the new one, but the library throws the old
one."
More information about the Gcc-help
mailing list