lower_bound and upper_bound are typically implemented in terms of partition_point, which is much more general than this version of lower_bound taking an element.
> if you don't need the more general case and its associated performance cost
In C++ the "more general case" typically doesn't have a performance cost.