HomePhabricator

[c++20] Add rewriting from comparison operators to <=> / ==.

Authored by Richard Smith <richard-llvm@metafoo.co.uk> on Oct 18 2019, 5:04 PM.

Description

[c++20] Add rewriting from comparison operators to <=> / ==.

This adds support for rewriting <, >, <=, and >= to a normal or reversed
call to operator<=>, for rewriting != to a normal or reversed call to
operator==, and for rewriting <=> and == to reversed forms of those same
operators.

Note that this is a breaking change for various C++17 code patterns,
including some in use in LLVM. The most common patterns (where an
operator== becomes ambiguous with a reversed form of itself) are still
accepted under this patch, as an extension (with a warning). I'm hopeful
that we can get the language rules fixed before C++20 ships, and the
extension warning is aimed primarily at providing data to inform that
decision.

llvm-svn: 375306

Event Timeline

Richard Smith <richard-llvm@metafoo.co.uk> committed rG974c8b7e2fde: [c++20] Add rewriting from comparison operators to <=> / ==. (authored by Richard Smith <richard-llvm@metafoo.co.uk>).Oct 18 2019, 5:04 PM