template isLattice(T, Ct, uint N)
static if(hasCellStateType!T && hasDimension!T && hasNeighbourhoodType!T)
enum isLattice =
T.Dimension == N && is(T.CellStateType : Ct) && isNeighbourhood!(T.NeighbourhoodType, N) && is(typeof(T.init.get!"_test"(Coord.init)) : Ct) && is(typeof(T.init.get(Coord.init)) : Ct) && is(typeof(T.init.set!"_test"(Coord.init, Ct.init)) : void) && is(typeof(T.init.set(Coord.init, Ct.init)) : void) && is(typeof(T.init.getNeighbours!"_test"(Coord.init)) : Ct[]) && is(typeof(T.init.getNeighbours(Coord.init)) : Ct[]) && is(typeof(T.init.iterate!"_test"( (Ct cellState, Ct[] neighbours, Coord c))) : void) && is(typeof(T.init.iterate( (Ct cellState, Ct[] neighbours, Coord c))) : void) && is(typeof(T.init.nextGen!"_test"()) : void) && is(typeof(T.init.nextGen()) : void);