Thread overview | |||||
---|---|---|---|---|---|
|
October 31, 2013 UFCS and error messages | ||||
---|---|---|---|---|
| ||||
Check this simple code: import std.stdio; import std.conv; bool is_zero(T)(T i) { return to!int(i) == 0; } void main() { "0".is_zero.writeln; } This code print "true" of course. If you replace "to!int(i) == 0" with "i == 0" compiler gives this error: "Error: no property 'is_zero' for type 'string'" But: is_zero("0") instead gives this: Error: incompatible types for ((i) == (0)): 'string' and 'int' Shoudn't "0".is_zero give this error too? |
October 31, 2013 Re: UFCS and error messages | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | Andrea Fontana:
> Shoudn't "0".is_zero give this error too?
Possibly yes. I put this enhancement request in Bugzilla few months ago, but I don't remember its number now.
Bye,
bearophile
|
October 31, 2013 Re: UFCS and error messages | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | Am Thu, 31 Oct 2013 11:58:18 +0100 schrieb "Andrea Fontana" <nospam@example.com>: > Check this simple code: > > import std.stdio; > import std.conv; > > bool is_zero(T)(T i) { return to!int(i) == 0; } > > void main() { "0".is_zero.writeln; } > > This code print "true" of course. > > If you replace "to!int(i) == 0" with "i == 0" compiler gives this error: > > "Error: no property 'is_zero' for type 'string'" > > But: > > is_zero("0") > > instead gives this: > > Error: incompatible types for ((i) == (0)): 'string' and 'int' > > Shoudn't "0".is_zero give this error too? If you see it as a universal function call, yes. But if you see it as an augmented property of string, then no. -- Marco |
Copyright © 1999-2021 by the D Language Foundation