avoid extra variable during void pointer cast

Stanislav Blinov via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun May 14 15:00:58 PDT 2017


On Sunday, 14 May 2017 at 21:55:01 UTC, ag0aep6g wrote:
> On 05/14/2017 11:35 PM, Moritz Maxeiner wrote:
>> On Sunday, 14 May 2017 at 21:16:04 UTC, Stanislav Blinov wrote:
> [...]
>>> T* ptrCast(T, alias ptr)() { return cast(T*)ptr; }
> [...]
>>>     alias _state = ptrCast!(int, state);
> [...]
>> That's a pretty cool workaround, but not an alias to the cast, 
>> but an
>> alias to a parametrized function template (a type),
>
> Not sure if I'm reading that right, but `_state` is not an 
> alias of a (parametrized function) template.
>
> The template instantiation results in a function. `_state` is 
> an alias of that function. `alias foo = ptrCast;` would make an 
> alias of the template. Neither of them is a type.

Yep, it's an alias to template function instantiation, that is, 
concrete function - a symbol.

But of course, it *is* going to be called on every "dereference". 
GDC optimizes the call away starting at -O1, LDC needs -O2. DMD 
makes temporaries :)


More information about the Digitalmars-d-learn mailing list