Querying parameter passing semantics for `auto ref const` variables

2017-01-15 Thread Nordlöw via Digitalmars-d-learn
Is there a way to query at compile-time whether a call to f(T)(auto ref const T x) passed the variable `x` from a l-value or r-value? A call to `isRef!T` inside the function `f` is always `false` for `l-value` and `r-value` passing. I need this to detect automatic delayed evaluation of

Re: Querying parameter passing semantics for `auto ref const` variables

2017-01-15 Thread Nordlöw via Digitalmars-d-learn
On Sunday, 15 January 2017 at 14:33:25 UTC, Nordlöw wrote: Is there a way to query at compile-time whether a call to Further, overloading such as struct S { int x, y; } static f(in S s) {} static f(const ref S s) {} f(S.init); S s; f(s); fails as declaration f is

Re: Querying parameter passing semantics for `auto ref const` variables

2017-01-15 Thread kinke via Digitalmars-d-learn
On Sunday, 15 January 2017 at 14:33:25 UTC, Nordlöw wrote: A call to `isRef!T` inside the function `f` is always `false` for `l-value` and `r-value` passing. According to https://dlang.org/spec/template.html#auto-ref-parameters, it should be `__traits(isRef, x)`.

Re: Querying parameter passing semantics for `auto ref const` variables

2017-01-15 Thread Nordlöw via Digitalmars-d-learn
On Sunday, 15 January 2017 at 17:00:41 UTC, kinke wrote: On Sunday, 15 January 2017 at 14:33:25 UTC, Nordlöw wrote: A call to `isRef!T` inside the function `f` is always `false` for `l-value` and `r-value` passing. According to https://dlang.org/spec/template.html#auto-ref-parameters, it sho

Re: Querying parameter passing semantics for `auto ref const` variables

2017-01-15 Thread Nordlöw via Digitalmars-d-learn
On Sunday, 15 January 2017 at 17:41:36 UTC, Nordlöw wrote: This struct S { int x, y; } void f()(auto ref const S s) { pragma(msg, "type:", typeof(s), " isRef:", isRef!s); } f(S.init); S s; f(s); prints type:const(S) isRef:false type:const(S) isRef:tr