|
using _Vty = range_value_t<_Rng>;
|
|
// This initialization is correct, similar to the N4950 [dcl.init.aggr]/6 example
|
|
minmax_result<_Vty> _Found = {static_cast<_Vty>(*_UFirst), _Found.min};
|
|
if (_UFirst == _ULast) {
|
|
return _Found;
|
|
}
|
|
|
|
while (++_UFirst != _ULast) { // process one or two elements
|
|
auto _Prev = *_UFirst;
|
The last auto _Prev = *_UFirst; indicates that we constructed remove_cvref_t<iter_reference_t<I>> from iter_reference_t<I>, which is not guaranteed to be well-formed by the function's constraints.
I believe we should do _Vty _Prev(*_UFirst); instead.
Contrived testcase: https://godbolt.org/z/Gdb8qffdM
STL/stl/inc/algorithm
Lines 10108 to 10116 in 1c59a20
The last
auto _Prev = *_UFirst;indicates that we constructedremove_cvref_t<iter_reference_t<I>>fromiter_reference_t<I>, which is not guaranteed to be well-formed by the function's constraints.I believe we should do
_Vty _Prev(*_UFirst);instead.Contrived testcase: https://godbolt.org/z/Gdb8qffdM