This does not match my experience here. Can you back that claim a bit?
for (size_t j = size; j > 0; --j) {
size_t i = j - 1;
// etc.
Or even: for (size_t j = 0; j <= size; ++j) {
size_t i = size - j;
// etc.