On Sunday, 30 December 2012 at 13:57:26 UTC, Namespace wrote:
I've played with this a bit today. The code is at https://github.com/jerro/dmd/tree/auto-ref. I know next to nothing about DMD, so it could be all kinds of wrong, but it does at least seem to work.

What do you think should happen in this case:

void foo(auto ref int a){}
void foo(int a){}
...
foo(1);

should this be an error, or should the second overload be called?

IMO the second overload (foo(int a)) should be called and the compiler shouldn't do anymore, because all necessary functions exists.

And what about this:

void foo(auto ref int a){}
void foo(ref int a){}

IMO the auto ref function should be replaced by void foo(int a){ }. Then all necessary functions exists also.

These aren't template functions. They must both be generated, whether they are used or not. And if they are both generated, name mangling for auto ref must be different, or the linker will complain.


Nice work so far, but I don't see any tests for it.
I hope it will be merged in this release.

Don't get your hopes up. This could have all kinds of problems, for example, it doesn't work for const auto ref yet. And even if it worked perfectly it's probably to late to merge it in this release.

Reply via email to