Вот что мы пытаемся сделать
try {
std::uninitialized_copy(...);
} catch(...) {
if(!boost::has_trivial_destructor<T>::value) {
// some cleanup to do here...
}
throw;
}
Мы задаемся вопросом, имеет ли значение try/catch стоимость, если константа времени компиляции в if
является ложной.
Может ли компилятор в своих правах "как-если" удалить попытку catch и вести себя как-будто вызов std::uninitialized_copy
появился без try
вокруг него?
Или есть что-то скрытое в спецификациях С++, которое требует, чтобы компилятор оставил его здесь? В качестве примера представьте гипотетическую функцию surrounding_try_blocks()
, которая возвращает динамическое окружение try try, отсчитываемое в настоящее время вокруг кадра.