oops, that was a mess... I guess I need to learn how to program. This one is not much better but at least works. I'll have to rewrite the code.

module main;

import std.stdio, std.traits;

template tuple(args...)
{
    alias tuple = args;
}

template tUnrollArgs(args...)
{
        pragma(msg, ">"~args.stringof);
        static if (args.length == 0)
                alias tUnrollArgs = tuple!();
        else
        static if (isArray!(typeof(args[0])))
        {
                pragma(msg, "isarray");
                static if (args[0].length > 1)
                {
                        pragma(msg, "unrolling");
                        static if (args[0].length > 1)
                        {
                                pragma(msg, "length > 1");
alias tUnrollArgs = tuple!(tUnrollArgs!(args[0][0]), tUnrollArgs!(args[0][1..$],args[1..$]));
                        }
                        else
                        {
                                pragma(msg, "length == 0 || 1");
                                alias tUnrollArgs = args[0];
                        }
                }
                else
                {
                        static if (args[0].length > 1)
                        {
                                pragma(msg, "1");
alias tUnrollArgs = tuple!(args[0][0], tUnrollArgs!(args[0][1..$], args[1..$]));
                        }
                        else
                        {
                                pragma(msg, "2");
alias tUnrollArgs = tuple!(args[0][0], tUnrollArgs!(args[1..$]));
                        }
                }
        }
        else
                //static if (args[0].length > 1)
//alias tUnrollArgs = tuple!(args[0], tUnrollArgs!(args[0][1..$]));
                //else
                        alias tUnrollArgs = args;
}

void main(string[] argv)
{
        immutable auto z = ["1", "2"];
    writeln(tUnrollArgs!(["a", "b"], z, "c"));
        readln();
}

Reply via email to