On 8 March 2012 15:39, Ary Manzana <a...@esperanto.org.ar> wrote: > On 3/7/12 2:28 AM, Ali Çehreli wrote: >> >> On 03/06/2012 09:11 PM, ixid wrote: >> > I'm writing my first basic algorithms, this one is merge sort. This >> > version throws an exception when array.length - setSize is negative >> > (which should be fine, the rest of my function would deal with it): >> > >> > template mergeSort(T) >> > { >> > void mergeSort(ref T[] array, const T setSize = 100) >> > { >> > T[][] merge; >> > merge.length = array.length / setSize; >> > T ii, jj; >> > for(ii = 0, jj = 0;ii < array.length - setSize;ii += setSize, ++jj) >> >> We don't know what T is, but I assume a signed type like int. >> >> array.length is size_t, i.e. an unsigned type. Unsigned types have this >> nasty habit of converting the entire expression to unsigned (that is a >> rule since C). So array.length - setSize above is size_t. > > > Wouldn't it make more sense to convert the entire expression to signed if > there's at list one signed integer? > > I really don't get it... > > It's like déjà-vu all the time in this newsgroup.
Its the semantics in C/C++ and D explicitly tries to have the same semantics as them. From what I remember its to aid people moving from those language to D. -- James Miller