Как напечатать больше, когда утверждение не выполняется?

Real opIndex(size_t row, size_t col = 0) const pure nothrow {
  assert(col + row * Col < Row * Col, "index out of bounds.");
  return _data[col + row * Col];
}

Сегодня это утверждение не удалось, и я хотел увидеть фактические значения row и col . К сожалению, assert не похож на Writeln или writefln , поэтому я не могу сделать что-то вроде:

assert(col + row * Col < Row * Col, "index out of bounds. row: %d  col: %d", row, col);

Я даже пробовал это:

assert(col + row * Col < Row * Col, "index out of bounds" ~ to!string(row)~ " " ~ to!string(col));

Но Я не могу позвонить с на , потому что opIndex чистый. Я мог бы временно удалить pure из opIndex , но это вызывает длинную цепочку отмен, потому что другие чистые методы вызывают opIndex . Отсутствие возможности вызвать на также исключает возможность создания моей собственной функции для перехода к assert .

Итак, что еще можно попробовать? Я просто хочу напечатать такие значения, когда утверждение не выполняется.

5
задан Arlen 27 February 2012 в 03:36
поделиться