It is a bad practice to `throw` something that's not derived at some level from `Error`. If you can't find an existing `Error` type that suitably conveys what you need to convey, then you should extend `Error` to create one.

Specifically, part of the point of throwing `Error`s is to communicate about the conditions of the error, but strings have far less ability to communicate meaningfully than `Error`s because they don't include stacktraces.

## Noncompliant Code Example

    throw "Invalid negative index.";        // Noncompliant

## Compliant Solution

    throw new Error("Invalid negative index.");

## See

- MISRA C++:2008, 15-1-2 - NULL shall not be thrown explicitly.