UFCS and error messages

Marco Leise Marco.Leise at gmx.de
Thu Oct 31 05:10:55 PDT 2013


Am Thu, 31 Oct 2013 11:58:18 +0100
schrieb "Andrea Fontana" <nospam at 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



More information about the Digitalmars-d-learn mailing list