will be asserted
if a string, will be used as error message, if a function, will be called to produce the error message (can be used to avoid costly message generations)
GuardError - if the assertion fails
will be asserted