Is there a way to remove the requirement for parenthesis?
Sergey Gromov
snake.scaly at gmail.com
Sun Jan 25 16:38:45 PST 2009
Wed, 21 Jan 2009 09:24:01 -0800, Charles Hixson wrote:
> In this test I'm trying to emulate how I want a typedef to act, but I
> run into a problem:
>
> import std.stdio;
>
> struct BlockNum
> { uint value;
>
> uint opCast() { return value; }
> void opAssign (uint val) { value = val; }
> uint opCall() { return value; }
> }
>
> void main()
> { BlockNum test;
> test = 42;
> uint tst2 = test(); // <<== if I don't have the parenthesis I
> // get a compiler error (cast
> // required).
> // kfile.d(15): Error: cannot implicitly convert expression
> // (test) of type BlockNum to uint
>
> writef ("tst2 = %d\n", tst2);
> }
>
> It seemed to me as if the parens shouldn't be required here, but I seem
> mistaken. Which leads to ugly code. Is there a way around this?
test is an expression of type BlockNum. opCall() is called when you use
parentheses syntax on it. opCast() is called when you use cast() syntax
for it. Otherwise it stays BlockNum and therefore is not convertible to
uint.
More information about the Digitalmars-d-learn
mailing list