http://d.puremagic.com/issues/show_bug.cgi?id=9935
Walter Bright <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #4 from Walter Bright <[email protected]> 2013-10-07 00:10:09 PDT --- The example code: ------------------ template TypeTuple(TList...) { alias TList TypeTuple; } template staticIndexOf(T, TList...) { enum staticIndexOf = genericIndexOf!(T, TList).index; } template genericIndexOf(args...) { alias args[0]e; alias args[1 .. $] tuple; alias Alias!(tuple[0]) head; alias tuple[1 .. $] tail; static if (isSame!(e, head)) { enum index = 0; } else { enum next = genericIndexOf!(e, tail).index; enum index = (next == -1) ? -1 : 1 + next; } } template Replace(alias T, alias U, TList...) { alias GenericReplace!(T, U, TList).result Replace; } template GenericReplace(args...) { alias args[]from; alias args[1]to; alias args[2 .. $] tuple; alias Alias!(tuple[0]) head; alias tuple[1 .. $] tail; static if (isSame!(from, head)) alias TypeTuple!(to, tail) result; else alias TypeTuple!(head, GenericReplace!(from, to, tail).result) result; } unittest { static assert(Pack!(Replace!(1111, "11", 2222, 1111, 1111, 1111)). equals!(2222, "11", 1111, 1111)); } template Alias(a...) { alias a Alias; } template isSame(ab...) { static if (!__traits(compiles, expectType!ab) && __traits(compiles, expectBool!(ab[0] == ab[1]))) static if (!__traits(compiles) ) enum isSame = ab[0] == ab[1]; else enum isSame = (isSame); else enum isSame = __traits(isSame, ab, ab); } template expectBool(bool b) {} template Pack(T...) { template equals(U...) { static if (T.length == 0) enum equals = true; else enum equals = isSame!(T, U) && Pack!(T[1 .. $]).equals!(U); } } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
