[Issue 7539] New: cast(bool) of empty array must result in false
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Feb 18 19:44:19 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7539
Summary: cast(bool) of empty array must result in false
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: timon.gehr at gmx.ch
--- Comment #0 from timon.gehr at gmx.ch 2012-02-18 19:44:16 PST ---
cast(bool)array must be rewritten to cast(bool)array.length.
assert(!""); // currently fails
assert(![]); // currently passes
assert(![' '][1..1]); // passes
assert(!" "[1..1]); // fails
assert(a==b && (!a&&b||!b&&a)); // might fail more or less randomly for dynamic
arrays a,b
The current behavior is that cast(bool)array is translated to
cast(bool)array.ptr. This is likely a leftover from the times when dynamic
arrays implicitly converted to their .ptr properties. It does not convey any
useful semantics, yet it is invoked implicitly every time a dynamic array
appears in a boolean evaluation context.
struct DynArray{
size_t length;
int* ptr;
alias ptr this;
}
void main(){
DynArray a;
int[] b;
writeln(cast(bool)a); // false
writeln(cast(bool)b); // false
a.ptr = new int;
writeln(cast(bool)a); // true
*(cast(int**)&b+1) = new int; // "b.ptr = new int"
writeln(cast(bool)b); // true
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list