Andrej Mitrovic <andrej.mitrov...@gmail.com> wrote:

Actually I'm having a hard time understanding this:

void main()
{
string s = "";
assert(s);  // pass, but why?
assert(s !is null);  // pass
}

void main()
{
string s = "".idup;
assert(s);  // fail
assert(s !is null);  // pass
}


Try adding writeln( s.ptr ); in there. Should probably give you an
indication of what is and == do.

Answer:

== null:
     Length
P    ==0 !=0
t ==0 T   F
r !=0 T   F


is null:
     Length
P    ==0 !=0
t ==0 T   F
r !=0 F   F

Where T and F stand for true and false, respectively.


So likely, idup on an empty string returns an array with null ptr and
0 length, while "" is 'allocated' in the data segment, and thus given a
ptr value.

--
Simen

Reply via email to