C++ is very forgiving about whitespace but you can't split an operator with spaces. you have y | = and that is a no-go, jam it together as |=
same goes for &= below it. Because stand alone & and | are operators, it can't get what you mean.
|=, &= etc are compound assignment operators. We can't separate them into two different tokens by placing white space between the two characters that form the operator.
1 2 3 4 5 6 7 8
int main()
{
unsignedint y = 5 ;
y |= 4 ; // fine, |= operator
y | = 4 ; // *** error: expected expression
}