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