Persistent list

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 16 12:38:43 PST 2015


On 11/16/15 2:37 PM, Andrei Alexandrescu wrote:
> On 11/16/2015 01:55 PM, Steven Schveighoffer wrote:
>> On 11/16/15 1:37 PM, Andrei Alexandrescu wrote:
>>> On 11/16/2015 12:51 PM, Steven Schveighoffer wrote:
>>>>      List tail() const
>>>
>>> I'd like tail to be qualifier-idempotent, i.e. return const for const
>>> and non-const for non-const. -- Andrei
>>
>> Why? const(int)[] isn't const, why should List!(const(int)) be?
>
> I'm keeping an eye toward other containers and also more general use.
> It's a common need. -- Andrei

Anywhere const can work, inout should work as well. The one exception as 
I've described is when you create and build a (im)mutable result, then 
converting it to const. In this case, you have to build it at once. 
Otherwise, the compiler can't tell whether this mutable thing you are 
constructing is safe to cast to inout (and whatever flavor it needs to 
cast to upon exit).

In this case, it appears to work only because of your cast of _allocator 
to mutable whenever you access it via allocator. Other than that, the 
only other member is the node pointer, which is const. Effectively, A 
list's data is always const, so there is no reason to make the struct 
itself const.

-Steve


More information about the Digitalmars-d mailing list