On Tuesday, 27 October 2015 at 14:21:12 UTC, bitwise wrote:
On Tuesday, 27 October 2015 at 07:52:27 UTC, Jacob Carlborg wrote:
On 2015-10-27 00:25, Tofu Ninja wrote:
[...]

I don't think this is possible. Think of code looking like this:

// Imagine not having access to the source code "createA"
A createA()
{
    new B;
}

void inspectA(A a)
{
    a.bar();
}

How should the compiler know that when instantiating/calling "bar", T should be set to B? The compiler might not even know about B exists at all. Even if the compiler does have access to the complete source code it would, most likely, need to do a full program analyze to figure out the type of T, which is quite complicated.

It's not a template function. The auto override wouldn't be instantiated if/when it's called. It would always be instantiated automatically when the class was compiled. Then, if you were just using the class as an import, the compiler would know that the definition should exists somewhere(static lib, etc..).

When an auto override function was called, it may or may not have the definition..it wouldn't matter, since it's like a virtual function. But, if someone tried to subclass a class which had even one auto override function with missing it's definition, then the effect would be the same as trying to subclass a sealed/final class.

    Bit

Going a bit further, I think you could override an auto override fun too manually as well. This would be helpful both for adding additional functionality, and as a fallback if the definition of the auto override function was not available. If someone sub classed a class in which they had manually overridden an auto override function, the compiler would fall back to using the base method, if available. Finally(pun intended), a user could manually override an auto override function and mark it as final to stop the automatic overriding.

   Bit

Reply via email to