class CustomException : Throwable { constructor(message: String?, cause: Throwable?) : super(message, cause) constructor(message: String?) : super(message, null) constructor(cause: Throwable?) : super(cause) constructor() : super() } fun box(): String { var t = CustomException("O", Throwable("K")) if (t.message != "O" || t.cause?.message != "K") return "fail1" t = CustomException(Throwable("OK")) if (t.message == null || t.message == "OK" || t.cause?.message != "OK") return "fail2" t = CustomException("OK") if (t.message != "OK" || t.cause != null) return "fail3" t = CustomException() if (t.message != null || t.cause != null) return "fail4" return "OK" }