Я читал об опасении, что чрезмерное использование noexcept
может помешать тестируемой библиотеке.
Обратите внимание:
T& vector::front() noexcept {
assert(!empty()); // <- this may throw in some test-frameworks
return data[0];
}
С аннотацией с noexcept
компилятор может оптимизировать исключение-кодировать, что может / могло бы помешать правильной обработке assert()
(или какой-либо функции, которую автор хочет использовать здесь для своих тестов).
Поэтому, мне интересно, возможно ли это в библиотеке для никогда не использует безусловный noexcept
, но всегда "связывает" его с условием "я в тесте".Вот так:
#ifdef NDEBUG // asserts disabled
static constexpr bool ndebug = true;
#else // asserts enabled
static constexpr bool ndebug = false;
#end
T& vector::front() noexcept(ndebug) {
assert(!empty());
return data[0];
}
, а затем, возможно, добавьте его в качестве макроса (хотя я ненавижу это):
#define NOEXCEPT noexcept(ndebug)
T& vector::front() NOEXCEPT {
assert(!empty());
return data[0];
}
Что вы думаете?Имеет ли это какой-либо смысл вообще?Или это не осуществимо?Или это не решает проблему?Или проблем нет вообще?: -)