Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2002-08-10 01:11:25

From: "Douglas Gregor" <gregod_at_[hidden]>

> On Friday 09 August 2002 04:26 pm, Fernando Cacciola wrote:
> > If the user-defined copy-ctor throws, AND variant does NOTHING, not
> > resetting 'v' to empty before the assignment, the variant lvalue will
> > left undefined. Not empty, just plain inconsistent.
> > This sounds terrifying, but it isn't, because a user defined type whose
> > copy-constructor throws will most likely define an assignment operator
> > which also throws, so the situation won't be any worse than working
> > this broken-type (as David called it) directly.
> I wouldn't call that a broken type. Most classes allocate memory in their
> constructor. I think I broken type is one that, for instance, doesn't
> even the basic guarantee for an assignment operator.

That's precisely what I meant when I said "broken type". BTW, I don't know
what Fernando's talking about above ;-)

> > IMO, since variant<> is essentially a compound type, exception-free
> > assignment should be guaranteed by the types it contains, not by
itself. We
> > shouldn't except it to do more than whatever the types themselves do.
> >
> > Besides, it will always be possible for a user to wrap offending types.
> I don't agree with the need for exception-free assignment. Then we can't
> have an std::string in a variant without wrapping it.

I agree with Fernando that we shouldn't expect variant to do more than
whatever the types themselves do. I also agree with Doug that requiring
exception-free assignment would be bad.


           David Abrahams * Boost Consulting
dave_at_[hidden] *

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