On 06/02/2016 11:37 PM, Alex wrote:
Just tried this instead of your f-function: void f(int[] arr) { A result; import std.meta; alias TL = AliasSeq!(Empty, int, Many!int); int caseS; switch (arr.length) { case 0: result = Empty.init; caseS = 0; break; case 1: result = arr[0]; caseS = 1; break; default: result = Many!int(arr); caseS = 2; } f_impl(*result.get!(TL[caseS])); } But got: Error: variable caseS cannot be read at compile time which is obviously true...
Yeah, can't do it that way. You have only one f_impl call, but want it to go to different overloads based on dynamic information (caseS). That doesn't work.
You need three different f_impl calls. You can generate them, so there's only one in the source, but it's a bit involved:
sw: switch (caseS) { foreach (i, T; TL) { case i: f_impl(result.get!T); break sw; } default: assert(false); }