I close BIP27. I won't be pursuing BIPs anymore

Namespace via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 19 10:54:15 PDT 2016


On Wednesday, 19 October 2016 at 17:42:39 UTC, Guillaume Piolat 
wrote:
> On Tuesday, 18 October 2016 at 06:30:15 UTC, Namespace wrote:
>> On Tuesday, 18 October 2016 at 02:54:08 UTC, Manu wrote:
>>> I just want to be able to pass an rvalue to a function that 
>>> receives a
>>> const ref... that's why I came to this forum in the first 
>>> place like,
>>> 7 years ago. 7 years later... still can't.
>>
>> I recently wrote a PR for p0nce D idioms, which shows how you 
>> can do that
>> https://github.com/p0nce/d-idioms/pull/119
>
> Just wanted to add that I still don't know (I'm lazy) what 
> "auto ref" parameters, "auto ref" return, and friends do in D.
> ref is somewhat easy to explain in C++ but complicated in D.

For each auto ref argument the compiler will lazily generate 2^N 
functions (therefore "template bloat" if you overdo it). Example:

----
struct A { int id; }
void test(T)(auto ref T a) { }

A a = A(42);
test(a);
----

will generate one function, which takes the argument by ref:
----
void test(ref A a) { }
----

Another call
----
test(A(42));
----

will generate another function, which takes the argument by value:
----
void test(A a) { }
----

That's more ore less the magic behind auto ref.


More information about the Digitalmars-d mailing list