GCC и throw-спецификация у автоматически сгенерированного виртуального деструктора
Имеется кусок кода:
View CodeCPP | |
#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 выдает интересную ошибку:
View CodeBASH | |
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
, то ошибка исчезнет.
В чем же дело? (далее...)