On 2012-17-12 10:12, Jonathan M Davis <jmdavisp...@gmx.com> wrote:

On Wednesday, December 12, 2012 09:23:35 Simen Kjaeraas wrote:
On 2012-09-12 00:12, js.mdnq <js_adddot+m...@gmail.com> wrote:
> struct bbyte {
> byte value;
> ...
> }
>
> bbyte a; bbyte b;
>
> b = a + b; // uses bbyte's operators and casts to do the computation and
> assignment but then returns a bbyte instead of an int.
>
> You should have no problems implicitly converting bbyte to built in
> types or built in types to bbyte.

Not entirely true. Converting from bbyte to built-in works, but these
are to my knowledge currently impossible:

void foo(bbyte b);
byte b;

foo(b); // No conversion.


bbyte bar( ) {
     byte b;
     return b;
}

You can do it with alias this, but the current lack of ability to have
multiple alias thises probably makes it so that you can't use it for
converting in both directions unless you want to directly alias it to the
member variable holding the value (which eans no checks or whatever else you might want to do in bbyte). Once we can have multiple alias thises though,
that shouldn't be problem anymore.

Really? This certainly does not compile for me:


struct bbyte {
    byte b;
    alias b this;
}

void bar(bbyte b) {}

bbyte baz() {
    byte b;
return b; // cannot implicitly convert expression (b) of type byte to bbyte
}

void main() {
    byte b;
bar(b); // function bar (bbyte b) is not callable using argument types (byte)
}


This is also the reason for bug #8570

http://d.puremagic.com/issues/show_bug.cgi?id=8570

--
Simen

Reply via email to