"The traditional rule is that for an array to be flagged as C contiguous, the following must hold:
```
strides[-1] == itemsize
strides[i] == shape[i+1] * strides[i + 1]
```
And for an array to be flagged as F contiguous, the obvious reversal:
```
strides[0] == itemsize
strides[i] == shape[i - 1] * strides[i - 1]
```
According to these rules, a 0- or 1-dimensional array is either both C- and F-contiguous, or neither; and an array with 2+ dimensions can be C- or F- contiguous, or neither, but never both. When <flag> is set, we use a more accurate definition of C- and F-contiguity, in which all 0-sized arrays are contiguous (regardless of dimensionality), and if shape[i] == 1 then we ignore strides[i] (since it has no affect on memory layout). With these new rules, it is possible for e.g. a 10x1 array to be both C- and F-contiguous -- but, they break downstream code which assumes that for contiguous arrays strides[-1] (resp. strides[0]) always contains the itemsize."