On 10/27/2016 10:00 AM, Jonathan Wakely wrote:
On 27 October 2016 at 14:52, Edward Diener wrote:
It sounds like you are also saying that there is no way to catch the old
type, even if I wanted to, since the header file declaration has the
decorated attribute.
No, the attribute is only present conditionally, see
https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
If you compile with _GLIBCXX_USE_CXX11_ABI defined to zero then you
get the declaration of the old type (and the old COW std::string, and
the old std::list with O(n) size()).
Thanks ! IMO clearly you should be throwing the std::ios_base::failure
which corresponds to the _GLIBCXX_USE_CXX11_ABI macro setting being
used. That gcc is throwing the the old type even when
_GLIBCXX_USE_CXX11_ABI is defined as 1 cannot be right. But I think that
is what you already said.
What always works now is to catch std::exception rather than
std::ios_base::failure so I will use that.