On Friday, 28 July 2017 at 22:06:27 UTC, Ali Çehreli wrote:
I think it works:

template replace(T) {
    template inside(Src...) {
        template from(Dst...) {
            import std.meta;
            enum f = staticIndexOf!(T, Src);
            static if (f == -1) {
                alias from = Src;
            } else {
alias from = AliasSeq!(Src[0 .. f], Dst[f], inside!(Src[f + 1 .. $]).from!(Dst[f + 1 .. $]));
            }
        }
    }
}

unittest {
    import std.meta : AliasSeq;
    replace!long
        .inside!(long, int, long, long, float, long)
        .from!(int, byte, char, double, dchar, real) a;
static assert(is (typeof(a) == AliasSeq!(int, int, char, double, float, real)));
}

void main() {
}

Ali

Thanks!

Reply via email to