-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
bugSomething isn't workingSomething isn't workingfixedSomething works now, yay!Something works now, yay!rangesC++20/23 rangesC++20/23 ranges
Description
Lines 10108 to 10116 in 1c59a20
| 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
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingfixedSomething works now, yay!Something works now, yay!rangesC++20/23 rangesC++20/23 ranges