enum pointers or class references limitation

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Fri Sep 1 16:47:13 PDT 2017


On 02.09.2017 01:37, Q. Schroll wrote:
> On Friday, 1 September 2017 at 23:13:50 UTC, Q. Schroll wrote:
>> [..]
>> Just as Scott Meyers said: make it easy to use correctly and hard to 
>> use incorrectly. Today it's easy to use incorrectly.
> 
> While
>    enum foo = [1,2,3];
>    assert(foo is foo);
> fails,
>    enum bla = "123";
>    assert(foo is foo);
> passes.
> 
> Enhancement request submitted: 
> https://issues.dlang.org/show_bug.cgi?id=17799
> 
> Unfortunately after I found out the second one does not have to do with 
> mutability. Making foo immutable(int)[] does not change anything. It 
> only works for const(char)[], immutable(char)[], and probably w/dchar 
> friends. That's odd.

This is called string pooling. This passed too:

void main(){
     assert("123" is "123");
}

D (at least sometimes) allows the identities of different immutable 
locations to become conflated.


More information about the Digitalmars-d mailing list