concrete illustration: --- void main() { test(); } void test(string s = "") { if (s) {} else { assert(false); } s ? {} : assert(false); } --- `""` is actually a pointer to 0x00 and a length of 0. Since `s.ptr` will never be null the else branch (or the last exp of a CondExpr) will never be executed, even when calling test() without argument.
I don't understand why this is a problem. I think that this is the intendend behavior; an empty string is not a null pointer.
Of course the else branch can be executed, just call test(null). Like RazvanN said, "" is not the same as null.