Re: boost::optional that throws
AlfC wrote:
I starting using boost:::optional and it was surprising to find that
boost::optional does not uses exceptions when asked to return a value
from a non intialized instance, but instead it uses assert.
I think the documentation mentions that dereferencing an empty
boost::optional<> yields undefined behaviour, just like referencing the
first element of an empty std::vector<> or reading through a null-pointer.
Is this something the designer did on purpose? (so for example, the
user doesn't get sloppy and he is forced to use operator! to check
initialization?)
I guess that this is on purpose. I often use boost::optional<> as an
alternative to using exceptions. Instead of returning a plain value and
throwing an exception when I can't, I simply return a boost::optional.
Is there a way to change the behavior of boost::optional to throw
exception when this happens?
Sure, it is open source, and I think there even is a tool to extract parts
of Boost (including their dependencies) from Boost. However, I wouldn't
want this replaced in my sources, because this means that the check always
has to be performed, even if I myself already did it. It's like a checked
container/iterator implementation - I want it for debugging to even signal
what the standard calls undefined behaviour, but with the released code I
simply assume that all errors were weeded out and then I don't want the
overhead anymore.
If not, is it a good idea to redefine the
macro assert to throw exceptions?
No, keep your fingers of macros of the standardlibrary.
Uli
--
Sator Laser GmbH
Gesch?ftsf?hrer: Ronald Boers, Amtsgericht Hamburg HR B62 932
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]