https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110124
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The reason for the C++20 and C++17 difference is because std::tie creates a std::tuple and for C++20 has a spaceship operator<=> (instead of operator<) and that causes needing to another another function after the spaceship operator to figure out `<`. The IR for C++20: D.70406 = std::operator<=><const int&, const int&, const int&, const int&, const int&, const int&> (&D.62773, &D.62783); D.70405 = std::operator< (D.70406, D.62981); vs for C++17: D.56644 = std::operator< <const int&, const int&, const int&, const int&, const int&, const int&> (&D.51943, &D.51953);