>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