https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100387
Bug ID: 100387
Summary: ranges::minmax compares moved-out value
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: hewillk at gmail dot com
Target Milestone: ---
In ranges_algo.h#L3301:
if (std::__invoke(__comp,
std::__invoke(__proj, __tmp),
std::__invoke(__proj, __result.min)))
__result.min = std::move(__tmp);
if (!(bool)std::__invoke(__comp,
std::__invoke(__proj, __tmp),
std::__invoke(__proj, __result.max)))
__result.max = std::move(__tmp);
we compare the moved-out __tmp in the second if statement.
test: https://godbolt.org/z/W6WTG6sdG