Sets / associative arrays with void values?

Georg Wrede georg at nospam.org
Sun Jan 7 10:18:30 PST 2007


Carlos Santander wrote:
> Chris Nicholson-Sauls escribió:
> 
>> Jeff M wrote:
>>
>>> On 2007-01-06 16:05:06 -0800, "Vladimir Panteleev" 
>>> <tehcybershadow at gmail.com> said:
>>>
>>>> I've been wondering whether D supported sets, or something similar. 
>>>> What I  have in mind isn't unlike associative arrays, but without 
>>>> values: an  unordered list with quick look-up and simple 
>>>> addition/removal of elements,  yet still capable of enumeration, etc.
>>>>
>>>> I followed my intuition and tried to declare an associative array 
>>>> with a  "void" value type:
>>>>
>>>> void[int] foo;
>>>>
>>>> To my surprise, it compiled. And even the "in" operation and the 
>>>> .keys and  .values properties worked fine (or as fine as they can 
>>>> work with an empty  associative array).
>>>>
>>>> Of course, the question comes: how would one add keys to such a 
>>>> construct?  The practical answer is obvious: use a real "dummy" data 
>>>> type (bit, for  example) as the value type, but I find it a shame 
>>>> that declaring such  constructs is allowed - yet you can't really 
>>>> use them.
>>>
>>>
>>> It would be nice if a "void[int]" array was usable. Associative 
>>> arrays are create-on-access, so "foo[5];" should be a legal for 
>>> creating an index in the array, but this throws an error.
>>>
>>> -- Jeff
>>>
>>
>> Actually I'm pretty sure create-on-access was removed several releases 
>> back?  And I also thought the compiler no longer allowed a void value 
>> type for associative arrays, but I guess I was wrong on that one.
>>
>> -- Chris Nicholson-Sauls
> 
> 
> That's true.
> Back then, I used "void[T]" as a set, but since the change, I use "T[T]".
> BTW, since "void[T]" is mostly useless (for the reasons stated above), 
> would it be reasonable for the compiler to flag such a declaration as an 
> error?

Or defined as a declaration of a set.




More information about the Digitalmars-d mailing list