Деструкторы и нет, кроме

Я немного запутался с деструкторами и noexcept, Насколько я понимаю, в C ++ 11 любой деструктор, в том числе пользовательский, неявно noexcept(true)даже если мы throw от него. И нужно указать явно noexcept(false) если они хотят, чтобы это было так по какой-то причине.

Что я вижу, так это то, что с GCC 4.7.2 пользовательский деструктор, независимо от того, насколько примитивны класс и деструктор, явно неявно noexcept(false), Что мне здесь не хватает? Есть ли какие-то скрытые ошибки с пользовательскими деструкторами?

25

Решение

Это известная ошибка (кредиты ОП за нахождение отчета об ошибке), и, похоже, это было исправлено в 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!");
}
16

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]