template dimensionality (S) {
  template count_dim (uint i = 0) {
    static if (is (typeof(S.init.opSlice!i (0,0))))
      enum count_dim = count_dim!(i+1);
else static if (i == 0 && (isInputRange!S || is (typeof(S.init[0])))
      enum count_dim = 1;
    else enum count_dim = i;
  }

  alias dimensionality = count_dim!();
}

Should work for any case I can think of (assuming integral indices).

Reply via email to