module miao.common.check; @safe: import std.range; import std.traits; template isValidParam(PatRange, CorpusRange) { enum bool isValidParam = __traits(compiles, { alias T1 = ElementType!PatRange; alias T2 = ElementType!CorpusRange; static assert(is(typeof(T1.init == T2.init))); PatRange a; CorpusRange b; static assert(is(typeof(a[$ - 1]))); static assert(is(typeof(b[$ - 1]))); static assert(is(typeof(a.length))); static assert(is(typeof(b.length))); }); } unittest { static assert(isValidParam!(int[], uint[])); static assert(isValidParam!(char[], int[])); static assert(isValidParam!(dchar[], char[])); static assert(isValidParam!(dchar[], int[])); static assert(isValidParam!(const(char)[], int[])); static assert(!isValidParam!(int, int[])); static assert(!isValidParam!(char, char)); }