Should the return types of the two versions be the same? If I make the non-segmented return sth like `typename util::detail::algorithm_result>::type` while the segmented one returns a `typename util::detail::algorithm_result>::type`