Menu
Home
Create new Paste
Log in
Code
Theme: cobalt
Theme: eclipse
Theme: elegant
Theme: monokai
Theme: neat
Theme: night
Theme: rubyblue
interface I {} class A : I {} class B { int x = 6; } class C : I { int x = 5; } void main () { A a = new A; B b = new B; C c = new C; I i; // classes are implicitly converted to interface // if they implement it static assert(__traits(compiles, i = a)); static assert(__traits(compiles, i = c)); static assert(!__traits(compiles, i = b)); // interfaces are not implicitly convertible static assert(!__traits(compiles, a = i)); static assert(!__traits(compiles, b = i)); static assert(!__traits(compiles, c = i)); // but may be explicitly converted with cast i = c; c = cast(C)i; assert(c.x == 5); //classes non-implementators can be also // explicitly converted, but it leads to UB i = cast(I)b; b = cast(B)i; assert(b.x == 6); //segfault }
Result:
Runtime error
/
Return code: 11 (Segmentation fault)
/
Compilation time:
0.088
seconds
/
Run time:
0
seconds
Disassembly
Username
Message
Add comment
Paste info
Author:
Guest
Views:
71
Private:
no
Expires:
Never
Uploaded:
03.12.12 15:25
Votes
:
0
Tweet
Compilation
Compiler:
DMD 2.060
Pointer size:
m64
Actions
Download
Fork
Raw
×
Confirm
Are you sure you want to delete this paste?
There's no way back!
×
Confirm
Reason