Undefined symbol for, apparently, valid code?
Arafel via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Jul 6 05:47:51 PDT 2017
Well, it happened to me once [1], and the reason is that templated
functions are final by default (since, as you said, it doesn't make
sense for them to be anything else).
This way the body of the function is assumed to be in a different
compilation unit (which is not, hence the linker error). If the variable
had been declared of type "Foo" instead of "Asd" it would probably had
worked, although this kind of defeat the purpose.
Whether it makes sense that this construction is allowed, is a different
question. I personally it makes sense to have the user explicitly ask
for "final", since we have otherwise "virtual by default", so this
behaviour is completely unexpected be most users. The whole thing makes
even less sense if you take into account that a explicit request to
override is just silently ignored.
Finally, have also in mind that if the function had been declared
abstract (as it arguably should), a compile-time error would have been
generated [2].
[1]: http://forum.dlang.org/post/kgxwfsvznwzlnhrdplkc@forum.dlang.org
[2]: https://dpaste.dzfl.pl/22f7e0840f01
On 07/06/2017 08:48 AM, rikki cattermole wrote:
>
> Templates+classes = require function body.
>
> Why? Templated methods are not virtual, they are final and cannot be
> inherited (so its a little strange that the override is valid).
More information about the Digitalmars-d-learn
mailing list