Этот код страдает от переполнения, потому что тип промежуточных результатов не зависит от типа назначения:
vector< uint8_t > increments;
…
vector< uint32_t > increasing( increments.size() );
partial_sum( increments.begin(), increments.end(), increasing.begin() );
Однако, это также (GCC 4.2):
partial_sum( increments.begin(), increments.end(), increasing.begin(),
plus< uint32_t >() );
Разве plus< uint32_t >
не должен продвигать свои операнды и избегать переполнения?
Редактировать: Я слишком зависимый. После небольшого перерыва я снова сел и проверил реализацию. Это делает это:
/* input_iterator::value_type */ __value = __binary_op(__value, *__first);
*++__result = __value;
Я не думаю, что это соответствует требованиям, поэтому я проверю последнюю версию и, возможно, сообщу об ошибке ...