February 16, 2004 A bug that I like | ||||
---|---|---|---|---|
| ||||
The specification says: "In D, function overloading is simple. It matches exactly, it matches with implicit conversions, or it does not match. If there is more than one match, it is an error." But this isn't true. There are "better matches" (to speak in terms of C++): class Foo {} class Bar : Foo {} class Baz : Bar {} void func (Foo foo) { printf ("Foo"); } void func (Bar bar) { printf ("Bar"); } int main () { Baz baz = new Baz(); func (baz); return 0; } This calles 'void func(Bar)'. So 'void func(Bar)' is a Better match than 'void func(Foo)' as both don't match exactly. So I'd like you to change the specification rather than fixing the "bug". |
February 22, 2004 Re: A bug that I like | ||||
---|---|---|---|---|
| ||||
Posted in reply to Matthias Becker | When I compile the example, I get the expected: test.d(18): function func overloads void(Foo foo) and void(Bar bar) both match a rgument list for func I'm going to leave it as is, due to the quagmire of going down the path of deciding what constitutes a better match <g>. |
Copyright © 1999-2021 by the D Language Foundation