| 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
Permalink
Reply