NULL indicator in Variant

Steven Schveighoffer schveiguy at yahoo.com
Thu Oct 27 10:58:54 PDT 2011


On Thu, 27 Oct 2011 13:53:02 -0400, Steve Teale  
<steve.teale at britseyeview.com> wrote:

> On Thu, 27 Oct 2011 13:09:43 -0400, Steven Schveighoffer wrote:
>
>> On Thu, 27 Oct 2011 12:58:57 -0400, Steve Teale
>> <steve.teale at britseyeview.com> wrote:
>>
>>> On Thu, 27 Oct 2011 16:16:26 +0200, Alex Rønne Petersen wrote:
>>>
>>>> On 27-10-2011 15:50, Steve Teale wrote:
>>>>>>
>>>>>> Surely Variant.init should do the trick?
>>>>>
>>>>> Dmitry,
>>>>>
>>>>> Are you talking about the new std.variant - I don't see 'init'
>>>>> currently.
>>>>>
>>>>> Steve
>>>>
>>>> He is probably referring to the 'init' property on the *type*, i.e.
>>>> int.init and so on.
>>>>
>>>> - Alex
>>>
>>> Same catch 22. In order to have an init property, the Variant would
>>> have to have been set to some type, at which point hasValue() would say
>>> yes.
>>>
>>> Steve
>>
>> import std.variant;
>>
>> void main()
>> {
>>      Variant v = 1;
>>      assert(v.hasValue());
>>      v = v.init;
>>      assert(!v.hasValue());
>> }
>>
>> -Steve
>
> Exactly, and v has reverted to being typeless:

Sorry to jump in mid-stream, but you seemed to be suggesting Variant  
didn't have an init without an assigned type.

Why wouldn't you just wrap variant if you want to introduce a nullable  
variant type?  Why does Variant have to be muddied with requirements for  
database API?  Database null is an entirely different animal from D's null.

-Steve


More information about the Digitalmars-d mailing list