Cannot Call Super-Class Overloaded Function If Class has Function Override?

Vijay Nayar madric at gmail.com
Tue Mar 1 08:40:12 UTC 2022


I've randomly encountered a strange error, and I cannot find any 
explanation for it in the official documentation of syntax.

Essentially, a class cannot call function overload in a 
super-class if the class itself contains an override. Is this a 
bug? Is this on purpose? Take a look at `B.otherThing()` below.

``` d
void main()
{
   abstract class A {
     // An abstract method for sub-classes
     abstract void doThing(string a, size_t b);
     // A convenience helper.
     void doThing(string a) {
       doThing(a, a.length);
     }
   }
	
   class B : A {
     // If this overload exists, something strange happens...
     override
     void doThing(string a, size_t b) {
     }
		
     void otherThing() {
       // Error: `B.doThing(string a, ulong b)`
       // is not callable using argument
       // types `(string)`
       doThing("hello");

       super.doThing("hello");  // OK
     }
   }
}
```


More information about the Digitalmars-d-learn mailing list