static map as a type function

Stefan Koch uplink.coder at
Wed Sep 23 09:46:54 UTC 2020

Hi guys,

So, today I wanted to implement handling of typesafe variadic 
array for type function (alias[] ...).
When writing a test for it I found out that I already did (on the 
talias_master branch which is different from talias_safe).

So here's the static map as a type function.
This also shows of interplay between templates and type functions.
That should be surprising since type functions are just regular 
functions that happen to accept types as arguments ;)


struct DummyType {} // just a dummy to get the right inference

auto getUDAs(alias T) { return __traits(getAttributes, T); } // 
needed because that's the shortest thing that'll return alias[]

alias alias_array = typeof(getUDAs(DummyType));

auto static_map_tf(alias F)(alias_array types ...)
     typeof(F(DummyType))[] result;
     result.length = types.length;

     foreach(i, t;types)
         result[i] = F(t);

     return result;

size_t sizeOf(alias t)
     return t.sizeof;

alias Int = int;
alias Ushort = ushort; // we need these aliases because the 
parser won't allow us to call a function with a reserved type 

static assert(static_map_tf!sizeOf(Int, Ushort) == [4, 2]);


This code has been working quietly for a while.
So go and download
Build your own compiler.
And play with type functions.



More information about the Digitalmars-d mailing list