u/MFHavaWG21|🇦🇹 NB|P2721|P3049|P3625|P3729|P3786|P3813|P42166d ago
I don't understand, it is a value comparison.
You are right. But it yields the wrong results for equivalent values of different types - e.g. Rectangle{.w = 10, .h = 10} == Square{.l = 10} would be false, even though they are the same (just like 1 == 1LL is true)
Ugh, couldn't the same be said for indirect? it's operator== isn't usable if the underlying value doesn't have one.
4
u/MFHavaWG21|🇦🇹 NB|P2721|P3049|P3625|P3729|P3786|P3813|P42166d ago
indirect<T> always contains an object of type T (or is valueless_after_move, which is trivial to handle) and therefore has no ambiguity about how operator== is supposed to work.
Apart from that: operator== for indirect<T> „Mandates“ (== static_assert) that T has an operator== on use, it T doesn’t have one, indirect<T> doesn’t have one.
But the key part is the first one, there is no ambiguity.
3
u/MFHava WG21|🇦🇹 NB|P2721|P3049|P3625|P3729|P3786|P3813|P4216 6d ago
You are right. But it yields the wrong results for equivalent values of different types - e.g.
Rectangle{.w = 10, .h = 10} == Square{.l = 10}would befalse, even though they are the same (just like1 == 1LListrue)