On Thursday, 22 January 2015 at 18:23:00 UTC, Meta wrote:
Whoops, I forgot to make it a template to force CTFE.

import std.stdio;

template charRange(string spec)
{
    static processInput(string spec)
    {
        import std.algorithm;
        import std.ascii;
        import std.conv;
        import std.range;
        import std.string;

        return spec.split(',').map!((s)
        {
            s = s.strip;
            auto start = s[1..$].front;
            auto end = s[0..$-1].back;

return iota(start, end + 1).map!(c => cast(char)c).array;
        }).array.join;
    }

    enum charRange = processInput(spec);
}


void main(string[] argv)
{
    auto t = charRange!q{ 'a'..'z', 'A'..'Z', '0'..'9' };
    writeln(t);

    readln();
}

Reply via email to