inline void my_assert(bool cond, const std::exception &e = my_assert_failed())
{
if (!cond)
throw e;
}
Стандарт гарантирует, что:Бросок временный аргумент, передаваемый по ссылке
Временная граница с опорным параметром в вызове функции (5.2.2) сохраняется до завершения полного выражения не содержащая вызов.
И брошенного временный объект:
Временная сохраняется до тех пор, пока обработчик выполняется для этого исключения.
Могу ли я сделать вывод о том, что временное, которое передается my_assert
, сохраняется до тех пор, пока блок catch не завершится?
Параметр 'throw' [выражение] (http://en.cppreference.com/w/cpp/language/throw) выполняет копия его аргумента, чтобы вы не бросали временные. – user657267
@ user657267 Это ответ. – Angew