A defaulted == operator function for a class C
is defined as deleted
unless, for each in the expanded list of subobjects
for an object x of type C,
is a valid expression and
contextually convertible to bool.

The return value V of a defaulted == operator function
with parameters x and y is determined
by comparing corresponding elements and
in the expanded lists of subobjects for x and y
(in increasing index order)
until the first index i
where yields a result value which,
when contextually converted to bool, yields false.

A defaulted != operator function for a class C
with parameters x and y is defined as deleted if

- overload resolution ([over.match]), as applied to x == y, does not result in a usable function, or
- x == y is not a prvalue of type bool.

Otherwise, the operator function yields !(x == y).