Mixin template function

monarch_dodra monarchdodra at gmail.com
Wed Feb 13 23:10:22 PST 2013


On Thursday, 14 February 2013 at 05:49:33 UTC, cal wrote:
> And a related question:
>
> class A
> {
>     void foo(int i){}
>     void foo(Tuple!(int) i){}
> }
>
> class B: A
> {
>     override void foo(int i){}
> }
>
>
> int main()
> {
>
>     auto b = new B;
>     b.foo(tuple(5));
> }
>
> This fails to compile. Why can't B use A's tuple overload of 
> foo()? If I do this:
>
> class B: A
> {
>     override void foo(int i){}
>     void foo(Tuple!(int) i){} // no override keyword is 
> deprecated
> }
>
> The compiler warns about not using the override keyword, so it 
> must be seeing the function?

This looks like it comes from C++, and is a built-in protection. 
If you override a single method, it will shadow all other 
overloads. This makes sure you don't accidentally call something 
you didn't want over-ridden. If you know what you are doing, then 
you can make it explicit. C++ uses the "using" keyword. I don't 
know how D does it.

http://stackoverflow.com/questions/888235/overriding-a-bases-overloaded-function-in-c


More information about the Digitalmars-d-learn mailing list