Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-10-10 21:39:47

"E. Gladyshev" <egladysh_at_[hidden]> writes:

> --- Eric Friedman <ebf_at_[hidden]> wrote:
> [...]
>> Since the value of v is in general wholly unspecified, it seems to me
>> that the only way to ensure meaningful content for v is another
>> assignment. This suggests to me that a singular variant is no worse than
>> one with unspecified content.
> I think that debugging programs with singular variants
> is much simpler than with variants with unspecified content.
> If you allow unspecified content, in practice you would
> have to catch unspecified data for all types in your variants
> instead of just one case of a singular variant.
> If you don't catch well formed but unspecified content,
> the program might appear running just fine for years.
> Programmer's worst nightmare. :)

Oh, two more things I should point out:

1. The unspecified content that can arise with variant is never any
   worse than the unspecified content of one of its contained types.
   In other words, you can only get unspecified content when assigning
   a new T value into a variant already containing an object of type
   T, and only if T's assignment operator does not give at least the
   strong guarantee.

2. If you change variant so that it "goes singular" the moment an
   assignment fails, you actually *weaken* the guarantees you get for
   a variant where every possible contained type's assignment operator
   gives at least the strong guarantee. Basically, the value is still
   perfectly good, but just because there was an exception, variant
   decides it must be erased. I think that's nasty.

Dave Abrahams
Boost Consulting

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