xxxxxxxxxx
import std;
struct S
{
int x = 0;
string toString()
{
return "S(x=" ~ x.to!string ~ ")";
}
}
struct ZeroOrMore(T = uint, Types...) if (__traits(isUnsigned, T))
{
static assert(Types.length == 0 || Types.length == 1);
T[] _t;
static if (Types.length > 0)
{
alias V = Types[0];
V[] _values;
void ins(T t, V val)
{
this._t ~= t;
this._values ~= val;
}
}
else
{
void ins(T t)
{
this._t ~= t;
}
}
}
void main()
{
auto s = ZeroOrMore!()();
s.ins(456);
auto s2 = ZeroOrMore!(uint, S)();
s2.ins(123, S(666));
writeln(s); // ZeroOrMore!uint([456])
writeln(s2); // ZeroOrMore!(uint, S)([123], [S(x=666)])
}