I vaguely remember I saw somewhere a discussion on this but I cannot find it now; "non-const min max c++" and similar variants give no relevant results.
Why doesn't the C++ standard library include the following non-const overload of std::min
(and similarly for std:max
)?
template <typename T>
T& min(T& a, T& b);
It could be useful sometimes, e.g. if I want to increase the lower number:
std::min(x, y) += 1;
Are there any problems this overload would cause?
std::max is defined in the header file <algorithm> and is used to find out the largest of the number passed to it. It returns the first of them, if there are more than one.
std::min is defined in the header file <algorithm> and is used to find out the smallest of the number passed to it.
std::min and std::max are constexpr in C++14, which obviously means there isn't a good reason (these days) not to have them constexpr. Problem solved :-) Save this answer.
This was proposed by Howard E. Hinnant in N2199: "Improved min/max", which according to this discussion was rejected.
In the same discussion Howard mentions these as the reasons for the rejection:
The implementation was considered too complicated at the time. Though I haven’t tried, it could almost surely be done much more simply in today’s language/library. At the very least what is called “promote” in the implementation is today called “std::common_type”.
Part of the complication is that I attempted to solve several problems at the same time:
- Being able to assign into the result of min (but only when safe to do so).
- Eliminate dangling reference dangers at compile-time.
- Support heterogeneous integral comparisons, weeding out dangerous combinations at compile-time.
- Support move-only types.
As T.C. mentions in the same discussion, a proposal would also need to not break code such as:
int i = 1; std::min(i, 0);
If you're interested in solving the problems mentioned in the discussion and writing a proposal + example implementation, then this could eventually make it into the Standard.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With