Re: [Issue 8001] New: Alias this takes ownership of explicit cast

2012-05-02 Thread Namespace

This works fine:

[code]
import std.stdio;

class A {
int val;

alias val this;

T opCast(T : Object)() {
return to!(T)(this);
}
}

class B : A {

}

T to(T : Object, U : Object)(const U obj) {
return *(cast(T*) &obj);
}

void main () {
A a = new B();
a.val = 42;

writefln("a.val: %d", a.val);

B* b = cast(B*) &a;
writefln("*b.val: %d", b.val);

B b1 = to!(B)(a);
writefln("b1.val: %d", b1.val);

B b2 = cast(B) a;
writefln("b2.val: %d", b2.val);
}
[/code]


Re: [Issue 8001] New: Alias this takes ownership of explicit cast

2012-05-02 Thread Namespace

On Sunday, 29 April 2012 at 14:40:06 UTC, Jesse Phillips wrote:

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

   Summary: Alias this takes ownership of explicit cast
   Product: D
   Version: D2
  Platform: All
OS/Version: All
Status: NEW
  Severity: normal
  Priority: P2
 Component: DMD
AssignedTo: nob...@puremagic.com
ReportedBy: jesse.k.phillip...@gmail.com


--- Comment #0 from Jesse Phillips 
 2012-04-29 07:41:14 PDT ---
When attempting to downcast a class which uses alias this, the 
operation fails

because the cast is applied to the item aliased.

I think the semantics should be to attempt an implicit cast 
(alias this), then
a cast of the top class, afterwards the alias this item can be 
casted.


test.d(3): Error: e2ir: cannot cast a.val of type int to type 
test.B


void main () {
A a = new B();
B b = cast(B) a;
}

class A {
int val;
alias val this;
}
class B : A {}


Workaround:

import std.stdio;

class A {
   int val;

   alias val this;
}

class B : A { }

void main () {
   A a = new B();
   B* b = cast(B*) &a;
}

But i have no idea how this can work implicit as long as this bug 
isn't fixed.
Maybe it can work with an opCast in B, which cast first to B* and 
then to B.


[Issue 8001] New: Alias this takes ownership of explicit cast

2012-04-29 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=8001

   Summary: Alias this takes ownership of explicit cast
   Product: D
   Version: D2
  Platform: All
OS/Version: All
Status: NEW
  Severity: normal
  Priority: P2
 Component: DMD
AssignedTo: nob...@puremagic.com
ReportedBy: jesse.k.phillip...@gmail.com


--- Comment #0 from Jesse Phillips  2012-04-29 
07:41:14 PDT ---
When attempting to downcast a class which uses alias this, the operation fails
because the cast is applied to the item aliased.

I think the semantics should be to attempt an implicit cast (alias this), then
a cast of the top class, afterwards the alias this item can be casted.

test.d(3): Error: e2ir: cannot cast a.val of type int to type test.B

void main () {
A a = new B();
B b = cast(B) a;
}

class A {
int val;
alias val this;
}
class B : A {}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---