|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-10-06 10:47:59
From: "Howard Hinnant" <hinnant_at_[hidden]>
> > What is the difference between the two examples? You can't add a char
> > const*
> > overload without breaking code AFAICS.
> >
> > struct X
> > {
> > operator std::string () const;
> > operator char const* () const;
> > };
> >
> > std::runtime_error(X());
>
> Don't they shoot programmers for doing this? :-)
They used to. :-)
> One difference is that vendors of <stdexcept> have the freedom of using
> compiler magic to make it work.
>
> That being said, the Metrowerks runtime_error is implemented exactly as
> you allude, and has been for several years. I've yet to receive a
> single complaint on the issue. But perhaps it is time to revisit it.
> There may be other techniques for achieving the same end. Or perhaps I
> will resort to compiler magic.
Isn't this a strong argument to fix the standard to match your
implementation?
> In any event, I still think there is a valuable difference. Our
> containers (e.g. <vector>) are examples of clients who need to throw
> simple exceptions (from <stdexcept>), but don't want the overhead of
> including <string>. And if I find that desirable in my own code, it
> makes it very easy for me to imagine that others value this ability as
> well.
Don't get me wrong; I value the ability to not include <everything>. But why
not simply add the overload to the standard, instead of trying to somehow
specify that
void f(std::string const &);
f("fish");
is different than
f(std::string("fish"));
when in fact the two are equivalent.
-- Peter Dimov Multi Media Ltd.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk