WTF abstract is?

deadalnix deadalnix at gmail.com
Thu Oct 3 23:10:25 PDT 2013


On Friday, 4 October 2013 at 05:07:53 UTC, Zhouxuan wrote:
> ////////////////////////////////////////////////////////////
> //case 1
>
> class A
> {
>     abstract void foo();
> }
>
> class B : A
> {
>     static if( __traits(isAbstractClass, typeof(this) ))

this is invalid here. Not sure what you try to achieve via this 
static if.

>     {
>     }
>
>     override void foo()
>     {
>     }
> }
>
> void main()
> {
>     B b = new B();
> }
>
> //Error: cannot create instance of abstract class B

That is a bug.

> ////////////////////////////////////////////////////////////
>
> ////////////////////////////////////////////////////////////
> //case 2
>
> abstract class A
> {
>     void foo();
> }
>
> class B : A
> {
>     static if( __traits(isAbstractClass, typeof(this) ))
>     {
>     }
>
>     override void foo()
>     {
>     }
> }
>
> void main()
> {
>     B b = new B();
> }
>
> //Okay

It shouldn't, A.foo is not defined. You should get a link error.

> ////////////////////////////////////////////////////////////
>
> ////////////////////////////////////////////////////////////
> //case 3
>
> class A
> {
>     abstract void foo();
> }
>
> class B : A
> {
>     override void foo()
>     {
>     }
> }
>
> void main()
> {
>     B b = new B();
> }
>
> //Okay

This one work as expected :D

> ////////////////////////////////////////////////////////////
>
> How awkward it is given that "D is as old as C#"!
>
> Do you guys never used abstract class?

Not that much. Note that error comes up when abstract is mixed 
with static if and compile time reflection, both are not present 
in C#.


More information about the Digitalmars-d mailing list