Ars Longa, Vita Brevis

Май 22, 2008

GCC и throw-спецификация у автоматически сгенерированного виртуального деструктора

Рубрика: C/C++, Без рубрики
Метки: ,
Vladimir @ 1:43 пп

Имеется кусок кода:

#include <string>
 
class Base {
public:
    Base(void) {}
    virtual ~Base(void) throw() {}
};
 
class Derived : public Base {
public:
    ::std::string s;
};
 
int main(int, char**)
{
    return 0;
}

При компиляции в GCC выдает интересную ошибку:

g++ test.cpp
test.cpp:9: error: looser throw specifier for ‘virtual Derived::~Derived()test.cpp:6: error:   overriding ‘virtual Base::~Base() throw ()

Самое интересное, что если сделать Derived::s типа, например, int, то ошибка исчезнет.

В чем же дело? (далее...)