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();
}