Extend the call site default argument expansion mechanism?
Steven Schveighoffer
schveiguy at yahoo.com
Tue May 15 14:52:46 UTC 2018
On 5/15/18 10:26 AM, Yuxuan Shui wrote:
> On Tuesday, 15 May 2018 at 13:59:37 UTC, jmh530 wrote:
>> On Tuesday, 15 May 2018 at 13:16:21 UTC, Steven Schveighoffer wrote:
>>> [snip]
>>>
>>> Hm... neat idea. Somehow, opDispatch can probably be used to make
>>> this work even more generically (untested):
>>>
>>> struct WithAlloc(alias alloc)
>>> {
>>> auto opDispatch(string s, Args...)(auto ref Args args) if
>>> (__traits(compiles, mixin(s ~ "(args, alloc)")))
>>> {
>>> mixin("return " ~ s ~ "(args, alloc);");
>>> }
>>> }
>>>
>>> -Steve
>>
>> Example:
>> https://run.dlang.io/is/RV2xIH
>
> Sadly with(WithAlloc!alloc) doesn't work. (If you have to use
> withAlloc.func everywhere, it kind of destroy the point, doesn't it?)
It seems opDispatch isn't being used in the with statement. That seems
like a bug, or maybe a limitation. I'm not sure how "with" works, but I
assumed it would try calling as a member, and then if it doesn't work,
try the call normally. Probably it's checking to see if it has that
member first.
Annoying...
-Steve
More information about the Digitalmars-d
mailing list