Calling an alias for a Class method in another scope

Jacob Carlborg doob at me.com
Fri Jun 1 07:57:34 PDT 2012


On 2012-06-01 16:30, Steven Schveighoffer wrote:

> I'm surprised at some things that work with alias. It sometimes seems
> like black magic.
>
> Consider that this does work:
>
> void incx(alias x)()
> {
> x++;
> }
>
> void main()
> {
> int x = 0;
> incx!x();
> assert(x == 1);
> }
>
>
> now, consider that when incx!x is compiled, the stack frame for main
> doesn't exist! So how does the compiler build it?
>
> I suppose the issue with the lambda in class scope issue above is
> different, because incx has an implicit reference back to its caller's
> frame through the stack pointer.
>
> But it seems like there may be a way that it could work. For example,
> create an implicit, final (private) member function which has the body
> of the lambda. Then construct the Bar type with an alias to that
> function. Would it need a stack frame to work? I have no idea :) Again,
> black magic.
>
> -Steve

I don't see this example as strange. I mean, the same would work with a 
pointer or ref.

The lambda on the other hand was create in a scope where the 
this-reference wasn't available. But I don't know, as you say, black magic.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list