Деструкторы и noexcept
Я немного запутался с деструкторами и noexcept
. Я понял, что в С++ 11 любой деструктор, включая определяемый пользователем, неявно noexcept(true)
, даже если мы throw
от него. И нужно указать явно noexcept(false)
, если они хотят, чтобы это было по какой-то причине.
То, что я вижу, - это совсем другое - с GCC 4.7.2, определяемый пользователем деструктор, независимо от того, насколько примитивен класс и деструктор, неявно noexcept(false)
. Что мне здесь не хватает? Есть ли скрытая информация с определяемыми пользователем деструкторами?
Ответы
Ответ 1
Это известная ошибка (кредиты OP для поиска отчета об ошибке), и, похоже, она была исправлена в GCC 4.8. 0. Например, статическое утверждение ниже будет запускаться на GCC 4.7.2, но не на GCC 4.8.0:
struct X
{
~X() { };
};
int main()
{
X x;
// This will not fire even in GCC 4.7.2 if the destructor is
// explicitly marked as noexcept(true)
static_assert(noexcept(x.~X()), "Ouch!");
}