Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-03-22 12:13:52

Terje Slettebø <tslettebo_at_[hidden]> writes:

>>From: "Gennaro Prota" <gennaro_prota_at_[hidden]>
>> On Sat, 22 Mar 2003 09:52:07 -0500, David Abrahams
>> <dave_at_[hidden]> wrote:
>> >Kevlin Henney <kevlin_at_[hidden]> writes:
>> >> However, the decision as to whether this should be in the 'what' string
>> >> is perhaps one that can be revisited. It would be feasible to avoid any
>> >> allocation issues at all by leaving the human readable string as
> general
>> >> as it was before and adding type_info members that described the source
>> >> and target types.
>> >
>> >Yes, that was my suggestion.
>> I'm happy that std::type_info has a private copy constructor. Hadn't
>> it been for that, my suggestion to use just a couple of typedefs would
>> have been routinely rejected :-)
> Storing a couple of type members is not enough, by itself. How would a
> catch-clause taking e.g. a reference to bad_lexical_cast access them? To
> access the typedefs, you need to know the exact type thrown, which means you
> need to know the types to begin with...

There's absolutely no reason I can see to make the exact exception
type depend on the types concerned. Just use a straightforward
class, something along the lines of:

     struct bad_lexical_cast : std::exception
           std::type_info const& src, std::type_info const& dst)
             : m_src(src), m_dst(dst) {}
        char const* what() throw() { return "bad_lexical_cast"; }

        std::type_info const& src() const { return m_src; }
        std::type_info const& dst() const { return m_dst; }
        std::type_info const& src;
        std::type_info const& dst;

Dave Abrahams
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at