Every type has at least a size of one byte. So a and b occupy different stack slots due to padding. The default op== does a memcmp and compares the padding as well.My guess.
Haha yes, you're spot on. I was asking more like, why does dmd do something so stupid?
https://issues.dlang.org/show_bug.cgi?id=13947
