Thread overview
weird empty string
May 13, 2017
mogu
May 13, 2017
Stanislav Blinov
May 13, 2017
mogu
May 14, 2017
Kagamin
May 13, 2017
Yuxuan Shui
May 13, 2017
ag0aep6g
May 13, 2017
```d
if (null)
    "1".writeln;
if ("")
    "2".writeln;
if ("" == null)
    "3".writeln;
```

Output:
2
3

How to understand this?
May 13, 2017
On Saturday, 13 May 2017 at 00:36:55 UTC, mogu wrote:
> ```d
> if (null)
>     "1".writeln;
> if ("")
>     "2".writeln;
> if ("" == null)
>     "3".writeln;
> ```
>
> Output:
> 2
> 3
>
> How to understand this?

Boolean conversion on an array works on array's pointer, not it's length. So even though `"".length == 0`, `"".ptr != null`, and so `cast(bool)"" == true`.
May 13, 2017
On Saturday, 13 May 2017 at 00:59:14 UTC, Stanislav Blinov wrote:
> On Saturday, 13 May 2017 at 00:36:55 UTC, mogu wrote:
>> ```d
>> if (null)
>>     "1".writeln;
>> if ("")
>>     "2".writeln;
>> if ("" == null)
>>     "3".writeln;
>> ```
>>
>> Output:
>> 2
>> 3
>>
>> How to understand this?
>
> Boolean conversion on an array works on array's pointer, not it's length. So even though `"".length == 0`, `"".ptr != null`, and so `cast(bool)"" == true`.

```d
string s1 = null;
string s2 = "";
assert(s1 == null);
assert(s1.ptr == null);
assert(s2 == null);
assert(s2.ptr != null);
if (s1)
    1.writeln;
if (s2)
    2.writeln;
```

Output:
2

Thanks very much. This is a little bit confusing.
May 13, 2017
On Saturday, 13 May 2017 at 00:59:14 UTC, Stanislav Blinov wrote:
> On Saturday, 13 May 2017 at 00:36:55 UTC, mogu wrote:
>> ```d
>> if (null)
>>     "1".writeln;
>> if ("")
>>     "2".writeln;
>> if ("" == null)
>>     "3".writeln;
>> ```
>>
>> Output:
>> 2
>> 3
>>
>> How to understand this?
>
> Boolean conversion on an array works on array's pointer, not it's length. So even though `"".length == 0`, `"".ptr != null`, and so `cast(bool)"" == true`.

However

if ([])
    "1".writeln;

prints nothing.

So why does "" has non-null pointer while [] has null pointer? Looks inconsistent.
May 13, 2017
On 05/13/2017 06:20 AM, Yuxuan Shui wrote:
> So why does "" has non-null pointer while [] has null pointer? Looks
> inconsistent.

String literals are null-terminated, so "" needs to point at a null byte.
May 14, 2017
On Saturday, 13 May 2017 at 03:41:29 UTC, mogu wrote:
> Thanks very much. This is a little bit confusing.

There was a lot of discussion about it: https://issues.dlang.org/show_bug.cgi?id=4733, https://forum.dlang.org/thread/rrrtkfosfnfuybblexow@forum.dlang.org