Compile time only delegates

Frustrated Frustrated at nowhere.com
Tue Mar 25 13:20:28 PDT 2014


On Tuesday, 25 March 2014 at 18:10:17 UTC, Meta wrote:
> On Tuesday, 25 March 2014 at 18:05:47 UTC, Frustrated wrote:
>> Due to a previous issue I am trying to do the following
>>
>> mixin template A()
>> {
>>    mixin((function () => "int x;")() );
>> }
>>
>> the problem is that the compiler will not let me use the 
>> delegate because it has no this context. Of course the whole 
>> point here is that the delegate will never be used at runtime 
>> since it is used in the mixin(which is purely compile time).
>>
>> It should work(there is no reason it shouldn't) yet it doesn't.
>>
>> The goal is that I do not want to create a function outside 
>> the mixin to use because it will be included in the context of 
>> the template mixin. e.g.,
>>
>> mixin template A()
>> {
>>    string B() { return "int x;"; }
>>    mixin(B()); // still doesn't work but if it did B would be 
>> inserted in the context of the template. e.g., if used in a 
>> class the class would then have a method named B in it, hence 
>> the use of the lambda.
>> }
>
> There shouldn't be a context pointer at all as you specified 
> that it's a function, not a delegate. Function literals don't 
> have context pointers as far as I know. Did you try:
>
> mixin((function () { return "int x;" })());
>
> Just to be sure?

Thanks, I thought I did try that(that was the first thing I tried 
I thought). Seems to be working though.


More information about the Digitalmars-d-learn mailing list