﻿# V3176\. The '&\=' or '\|\=' operator is redundant because the right operand is always true/false\.

The analyzer has detected a code fragment where the right operand of the '&\=' or '\|\=' operator always has the same value\.

Example:

```cpp
void Foo(bool status)
{
  ....
  bool currentStatus = ....;
  ....
  if(status)
    currentStatus &= status;
  ....
}
```

In 'then' block of the 'if' construct, a compound assignment operation is performed\. The 'currentStatus' variable will take a value equal to the result of the 'currentStatus & status' logical operation\. Based on the condition, 'status' will always be 'true', which makes it pointless to use the '&\=' operator — the value of 'currentStatus' will not change after the assignment\.

If the right\-hand operand is always 'false', the use of the '&\=' operator is also pointless\. In such cases, it can be replaced with a regular assignment\.

The use of the '\|\=' operator is also pointless if its right operand always has the same value:

* if the value is 'false', the values of the operands remain unchanged;
* if the value is always 'true', then it will be assigned to the left operand regardless of its original value\.

The cases described above may indicate both redundant use of '&\=' and '\|\=' operators and an error in the application's logic\.

Fixed version of the method described above may look as follows: 

```cpp
void Foo(bool status)
{
  ....
  bool currentStatus = ....;
  ....
  if(status)
    currentStatus = status;
  ....
}
```