﻿# V797\. The function is used as if it returned a bool type\. The return value of the function should probably be compared with std::string::npos\.

Анализатор обнаружил ошибку при поиске подстрок или символов в строке\.

Пример:

```cpp
std::string s = foo();
if (s.find("42")) { .... }
```

Функция 'std::string::find' возвращает число типа 'std::string::size\_type'\. В случае, когда ничего не найдено, возвращается 'std::string::npos', равный '\(size\_t\)\-1'\. Соответственно, для того чтобы проверить наличие подстроки, необходимо написать следующий код:

```cpp
if (s.find("42") != std::string::npos) { .... }
```

Несмотря на то, что код 'if \(s\.find\(\.\.\.\)\)' компилируется и работает, логика работы такого кода крайне подозрительна\. Он проверяет, что искомая подстрока не встречается или она не является началом строки 's'\. Если действительно нужно такое поведение, то лучше написать явно:

```cpp
const auto pos = s.find("42");
if (pos == std::string::npos || pos != 0) { .... }
```

Также можно воспользоваться функцией 'boost::starts\_with' или её аналогом\.