void foo(int x) {} void main() { 33.foo; // OK 0b100001.foo; // Error 0x21.foo; // Error } DMD 2.065alpha gives a colorful group of error messages: test.d(4): Error: found 'b100001' when expecting ';' following statement test.d(5): Error: exponent required for hex float test.d(5): Error: found 'oo' when expecting ';' following statement test.d(5): Warning: use '{ }' for an empty statement, not a ';' I think the "0b100001.foo;" case could be accepted. Note that currently the situation with float literals is OK: import std.stdio; void f(float x) { writeln(x); } void main() { 33.f; // calls f. float x = 33.0f; // float literal. } So perhaps this is also a bug report for hex float literals.
It works on base2 literals. It work on hex but the problem here was that f is an hex digit... void zoo(int x) {} void main() { 33.zoo; // OK 0b100001.zoo; // OK 0x21.zoo; // OK }