What do you propose? If I do
```C++
if (index < 0)
{
    return;
}
```
then there is no indication that something went wrong and doing
```C++
if (index < 0)
{
    return;
}
Assertion(index >= 0, "Invalid index passed!");
```
is pretty much the same thing twice.

Concerning static analysis: Assertions are considered "kill-paths" so if I assert something it is considered to be true after that assertion.