﻿# V617\. Argument of the '\|' bitwise operation always contains non\-zero value\. Consider inspecting the condition\.

The analyzer has detected use of a non\-zero constant in the bitwise operation OR \(\|\)\. The result of this expression is always a non\-zero value\. It may cause incorrect logic of program execution when such an expression is used in conditions or loops\.

Consider a simplest example:

```cpp
enum { FirstValue, SecondValue }; 
int Flags = GetFlags();
if (Flags | SecondValue)
{...}
```

The expression in the 'if' operator's condition is always true\. Errors related to using non\-zero constants in bitwise operations occur because of misprints\. For example, it may appear that another bitwise operation, for example &, should be used in such a fragment\. This is the correct code:

```cpp
enum { FirstValue, SecondValue };
int Flags = GetFlags();
if (Flags & SecondValue)
{...}
```

Consider a code sample the analyzer has found in one real application:

```cpp
#define PSP_HIDEHEADER 0x00000800
BOOL CResizablePageEx::NeedsRefresh(....)
{
  if (m_psp.dwFlags | PSP_HIDEHEADER)
   return TRUE;
  ... 
  return
    CResizableLayout::NeedsRefresh(layout, rectOld, rectNew);
}
```

It's obvious that the 'if' operator will always execute the 'return TRUE;' branch, which is incorrect\. This is the fixed code:

```cpp
#define PSP_HIDEHEADER 0x00000800
BOOL CResizablePageEx::NeedsRefresh(....)
{
  if (m_psp.dwFlags & PSP_HIDEHEADER)
    return TRUE;
  ... 
  return
    CResizableLayout::NeedsRefresh(layout, rectOld, rectNew);
}
```