(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
expr/
ptrmem10.C
/* [expr.eq] If both refer to (possibly different) members of the same union
   (12.3), they compare equal. */
// { dg-do run { target c++11 } }
// { dg-additional-options -O }

union U
{
  int i;
  int j;
};

#define SA(X) static_assert ((X),#X)
SA (&U::i == &U::j);
SA (!(&U::i != &U::j));

#define assert(X) do { if (!(X)) __builtin_abort(); } while(0)

void f (int U::*p, int U::*q)
{
  assert (p==q);
  assert (!(p!=q));
}

int main()
{
  assert (&U::i == &U::j);
  assert (!(&U::i != &U::j));
}