https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96480
Bug ID: 96480 Summary: missed optimisation: unnecessary compare in standard algorithms Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: kurkindmit at gmail dot com Target Milestone: --- Consider the C++ code: #include <algorithm> #include <array> enum ENUM { A, B, C, D, E, F, G, }; const std::array<ENUM, 4> foo{A, B, C, D}; bool is_foo(ENUM e) { return std::any_of(foo.begin(), foo.end(), [e] (auto ee) { return e == ee; }); } GCC 7.4 optimizes if_foo to a single compare operation e <= 3, but newer GCC versions do two comare operations e <= 2 || e == 3. see https://godbolt.org/z/5a6aPa