* Joe Buck: > Consider an implementation that, when given > > Foo* array_of_foo = new Foo[n_elements]; > > passes __compute_size(elements, sizeof Foo) instead of n_elements*sizeof Foo > to operator new, where __compute_size is > > inline size_t __compute_size(size_t num, size_t size) { > size_t product = num * size; > return product >= num ? product : ~size_t(0); > }
I don't think this check is correct. Consider num = 0x33333334 and size = 6. It seems that the check is difficult to perform efficiently unless the architecture provides unsigned multiplication with overflow detection, or an instruction to implement __builtin_clz.