it does not matter whether it is thrown: the stack trace will be filled in during construction unless you use `NoStackTrace`, and getting that stack trace takes *ages*