>From: "David Abrahams" <[EMAIL PROTECTED]>

> Terje Slettebų <[EMAIL PROTECTED]> writes:
>
> >>From: "Gennaro Prota" <[EMAIL PROTECTED]>
> >
> >> 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
>      {
>         bad_lexical_cast(
>            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; }
>       private:
>         std::type_info const& src;
>         std::type_info const& dst;
>      };

Right. I see that Kevlin also suggest this approach in a later posting. The
original version of the extended exception used static initialisation, as
mentioned, which is why it was templated.

I think this is a good approach.

Regarding the other MSVC 6 warning given in the original report, Gennaro
Prota has suggested using an explicit "!=", rather than relying on the
implicit conversion from pointer to bool. This also avoids using a cast,
instead.


Regards,

Terje

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to