I disagree with `version (D_NoBoundsChecks){} else` over `version (assert)` here. The point of NoBoundsCheck is for *array* indexing, because indexing an array out of bounds can result in a core dump, or undefined behavior, which we do not want, *even* in release mode.

In this case though, this code is pure argument validation, and the end user should not have to pay for it in -release mode.

The program would incorrectly accept invalid arguments, but the integrity of the program is not compromised.