Hello Jan!
Thanks for replying.
My reading is that it's not a requirement.
NaN seems to be supported indeed, and that's possibly the motivation.
Right, the semantic requirements of std::equality_comparable concept
are written in such a way that one might conclude that reflexivity in not required,
and thus floating point types (float, double, etc.) do model std::equality_comparable.
In that case, I would argue that the name of the concept is wrong / misleading,
because it intends to represent types providing operator ==, which implements partial equality,
that is, it should have been named std::partially_equality_comparable, not std::equality_comparable.
In mathematics, a partial equivalence relation is a homogeneous binary relation that is symmetric and transitive.
If the relation is also reflexive, then the relation is an equivalence relation.
The IEEE 754:2008 standard for floating-point numbers defines an "EQ" relation for floating point values.
This predicate is symmetric and transitive, but is not reflexive because of the presence of NaN values that are not EQ to themselves.
Thank you, Mateusz Zych