Don: > Tragic. Can we end this madness? > Could we give & | ^ the same precedence as ==, making > (a & mask == b) an error, just as (a < b == c) is rejected? > That way we could lay this common bug to rest.
You can change the dmd compiler (even D1, if you want) applying this change and create a compiled "experiment version" that people can try (even people that don't compile dmd every day), to see possible side effects of this change, use it to spot bugs in their D code or inside Phobos, etc. > BTW I think this a great cautionary tale about the dangers of rating > backwards compatibility too highly. Beside that one, there are few other parts of C/D code that I'd like still to turn into syntax errors in D2, like: 1) Implicit string concat (bug 3827, with an incomplete patch): string[] a = ["foo", "bar" "baz"]; 2) switch cases that don't end with goto or break: void main() { int x, y; switch (x) { case 0: y++; default: y--; } } 3) Several usages of C comma operator. And few others that I don't remember now. ---------------- Andrei Alexandrescu: > A perhaps little known thing is that D doesn't allow this: > int a, b, c; > if (a < b < c) { ... } > although it's compilable code in C. It's a pity C compatibily forbids to use that syntax in D, because chained comparison operator syntax is handy in Python to tell if a value is in a range: >>> 1 < 5 < 10 True >>> "hello" < "zeta" < "red" False Bye, bearophile