When is a slice not a slice?
Alix Pexton via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Jun 6 01:17:55 PDT 2014
On 05/06/2014 8:58 PM, Steven Schveighoffer wrote:
> On Thu, 05 Jun 2014 15:56:00 -0400, Philippe Sigaud via
> Digitalmars-d-learn <digitalmars-d-learn at puremagic.com> wrote:
>
>>> enum b = DataAndView(1);
>>> assert (!sameTail(b.data, b.view));
>>
>> I suppose it's because enums are manifest constants: the value they
>> represent is 'copy-pasted' anew everywhere it appears in the code. So
>> for arrays and associative arrays, it means recreating a new value
>> each and every time.
>> In your case, your code is equivalent to:
>>
>> assert (!sameTail(DataAndView(1).data,DataAndView(1).view));
>>
>> And the two DataAndView(1), being completely separated, do not have
>> the same tail.
>
> Yes, this should work (and execute the initializer at compile time):
>
> static b = ...
>
> -Steve
Ah, the problem with static is that I want to use the values at compile
time to create other values. Using static puts construction between
compile time and run time. Initialising in static this means that the
symbols need to be declared without initializers and that means not
disabling default construction ><
A...
More information about the Digitalmars-d-learn
mailing list