static map as a type function

Steven Schveighoffer schveiguy at gmail.com
Wed Sep 23 14:05:50 UTC 2020


On 9/23/20 9:38 AM, Stefan Koch wrote:
> On Wednesday, 23 September 2020 at 13:19:34 UTC, Steven Schveighoffer 
> wrote:
>> On 9/23/20 8:40 AM, Stefan Koch wrote:
>>> On Wednesday, 23 September 2020 at 12:22:49 UTC, Jacob Carlborg wrote:
>>>> On Wednesday, 23 September 2020 at 09:46:54 UTC, Stefan Koch wrote:
>>>>
>>>>> static assert(static_map_tf!sizeOf(Int, Ushort) == [4, 2]);
>>>>
>>>> Is it possible to use a lambda here?
>>>>
>>> It should be in theory but I advise against it. Mixing lambdas and 
>>> template alias parameters leads to instantiating different template 
>>> instances although semantically they're the same.
>>
>> what about:
>>
>> static_map_tf!((alias a) => a.sizeof)(...)
>>
>> This shouldn't be a template.
>>

> static_map_tf.d(12): vtemplate: 3 (3 unique) instantiation(s) of 
> template `static_map_tf(alias F)(alias_array types...)` found

Ah ok. You meant the static map template is going to be different 
because the lambdas are considered different aliases.

That's standard behavior for the current compiler too. I thought you 
meant that type functions have an extra problem with templates using 
lambdas.

It makes me wonder -- can the compiler determine identical lambdas and 
reduce template instantiations? This was one of the problems with moving 
from string lambdas to actual lambdas.

-Steve


More information about the Digitalmars-d mailing list