Daily bit(e) of C++ #194, Утилита C++20 для вычисления средней точки между двумя арифметическими типами или указателями: std::midpoint.

Вычисление среднего значения между двумя арифметическими типами или указателями может показаться тривиальным; однако, когда значения близки к числовым пределам или не соответствуют порядку, тривиальные реализации могут легко столкнуться с неопределенностью поведения.
C++20 представил std::midpoint, обеспечивающий безопасную реализацию.
#include <numeric>
auto m1 = std::midpoint(std::numeric_limits<int>::max(),
std::numeric_limits<int>::max()-2);
// m1 == std::numeric_limits<int>::max()-1
int data[]={5, 9, 2, 3, 1, 8, 4, 6, 7};
auto m2 = std::midpoint(data, data+9);
// *m2 == 1
auto m3 = std::midpoint(3.2, 7.6);
// m3 ~= 5.4