================
@@ -4321,6 +4305,38 @@ struct TriviallyEqualityComparable {
};
static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparable));
+template <class T>
+struct TriviallyEqualityComparableContains {
+ T t;
+
+ friend bool operator==(const TriviallyEqualityComparableContains&, const
TriviallyEqualityComparableContains&) = default;
+};
+
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableContains<int>));
+static_assert(!__is_trivially_equality_comparable(TriviallyEqualityComparableContains<int&>));
+static_assert(!__is_trivially_equality_comparable(TriviallyEqualityComparableContains<float>));
+static_assert(!__is_trivially_equality_comparable(TriviallyEqualityComparableContains<double>));
+static_assert(!__is_trivially_equality_comparable(TriviallyEqualityComparableContains<long
double>));
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableContains<int[4]>));
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableContains<int[4][4]>));
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableContains<Enum>));
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableContains<Enum[2]>));
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableContains<Enum[2][2]>));
+static_assert(!__is_trivially_equality_comparable(TriviallyEqualityComparableContains<EnumWithOpEq>));
+static_assert(!__is_trivially_equality_comparable(TriviallyEqualityComparableContains<EnumWithOpEq[2]>));
+static_assert(!__is_trivially_equality_comparable(TriviallyEqualityComparableContains<EnumWithOpEq[2][2]>));
+
+auto GetNonCapturingLambda() { return [](){ return 42; }; }
+
+struct TriviallyEqualityComparableContainsLambda {
+ [[no_unique_address]] decltype(GetNonCapturingLambda()) l;
+ int i;
+
+ friend bool operator==(const TriviallyEqualityComparableContainsLambda&,
const TriviallyEqualityComparableContainsLambda&) = default;
+};
+static_assert(!__is_trivially_equality_comparable(decltype(GetNonCapturingLambda())));
// padding
+static_assert(__is_trivially_equality_comparable(TriviallyEqualityComparableContainsLambda));
----------------
Fznamznon wrote:
The patch is modifying how `__is_trivially_equality_comparable` works with
enums whereas I don't see any enums in these test cases. This IMOI makes it
hard for someone who will be looking at this without context of this pr via git
blame to understand what is going on. The same way it was hard for me yesterday
to understand how these cases are related to the patch. Could you please create
a separate PR for these? The patch is otherwise LGTM and I'm ready to land it
for you once it is focused on enums.
https://github.com/llvm/llvm-project/pull/169079
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits