[clang] [Clang] Fix __is_trivially_equality_comparable returning true with ineligebile defaulted overloads (PR #93113)
Nikolas Klauser via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 27 09:00:07 PDT 2024
================
@@ -1126,9 +1126,6 @@ class QualType {
/// Return true if this is a trivially relocatable type.
bool isTriviallyRelocatableType(const ASTContext &Context) const;
- /// Return true if this is a trivially equality comparable type.
- bool isTriviallyEqualityComparableType(const ASTContext &Context) const;
----------------
philnik777 wrote:
The main problem with this is that you don't have to have a member. Take this test case for example:
```c++
struct NotTriviallyEqualityComparableMoreConstrainedExternalOp {
int i;
bool operator==(const NotTriviallyEqualityComparableMoreConstrainedExternalOp&) const = default;
};
bool operator==(const NotTriviallyEqualityComparableMoreConstrainedExternalOp&,
const NotTriviallyEqualityComparableMoreConstrainedExternalOp&) __attribute__((enable_if(true, ""))) {}
static_assert(!__is_trivially_equality_comparable(NotTriviallyEqualityComparableMoreConstrainedExternalOp));
```
I'm sure this can also be written with some `requires` clause. Without the builtin telling the library there is no way to figure out that a free function instead of the member is called.
https://github.com/llvm/llvm-project/pull/93113
More information about the cfe-commits
mailing list