module std_backport.meta; import std.meta : AliasSeq; /** * Converts an input range $(D range) to an alias sequence. */ template aliasSeqOf(alias range) { import std.range : isInputRange; import std.traits : isArray, isNarrowString; alias ArrT = typeof(range); static if (isArray!ArrT && !isNarrowString!ArrT) { static if (range.length == 0) { alias aliasSeqOf = AliasSeq!(); } else static if (range.length == 1) { alias aliasSeqOf = AliasSeq!(range[0]); } else { alias aliasSeqOf = AliasSeq!(aliasSeqOf!(range[0 .. $/2]), aliasSeqOf!(range[$/2 .. $])); } } else static if (isInputRange!ArrT) { import std.array : array; alias aliasSeqOf = aliasSeqOf!(array(range)); } else { import std.string : format; static assert(false, format("Cannot transform %s of type %s into a AliasSeq.", range, ArrT.stringof)); } }