Я только что обновил GCC с (я думаю) 4.5.6 до 4.6.1, под Windows, MinGW.Внезапно мой базовый класс NonInstantiable (от которого вы наследуете общедоступный виртуальный для предотвращения создания экземпляров) отказывается работать со следующими и похожими сообщениями об ошибках:
#ifndef Frigo_Lang_NonInstantiable
#define Frigo_Lang_NonInstantiable
namespace Frigo
{
namespace Lang
{
/**
* Inherit from this class if you want to make a non-instantiable class. Most
* useful for static classes. It seems every inheritance combination
* (public/protected/private, non-virtual/virtual) shuts off instantiation in
* all subclasses as well.
**/
class NonInstantiable
{
private:
/* Private Classes */
/**
* A dummy class to prevent GCC warnings about virtual
* constructors/destructors and no friends
**/
class NonInstantiableDummy { };
/* Private Constructors */
/**
* Private constructor to prevent instantiation
**/
NonInstantiable() { }
/**
* Private destructor to prevent instantiation on the stack. Virtual to
* prevent GCC warnings
**/
virtual ~NonInstantiable() { }
/* Friends */
friend class NonInstantiableDummy;
};
}
}
#endif
Ошибки:
/code/Frigo/Util/Arrays:40:7: error: deleted function 'virtual Frigo::Util::Arrays::~Arrays()'
/code/Frigo/Lang/Object:37:11: error: overriding non-deleted function 'virtual Frigo::Lang::Object::~Object()'
/code/Frigo/Util/Arrays:40:7: error: 'virtual Frigo::Util::Arrays::~Arrays()' is implicitly deleted because the default definition would be ill-formed:
/code/Frigo/Lang/NonInstantiable:39:11: error: 'virtual Frigo::Lang::NonInstantiable::~NonInstantiable()' is private
/code/Frigo/Util/Arrays:40:7: error: within this context
/code/Frigo/Lang/NonInstantiable:39:11: error: 'virtual Frigo::Lang::NonInstantiable::~NonInstantiable()' is private
/code/Frigo/Util/Arrays:40:7: error: within this context
/code/Frigo/Util/Arrays:40:7: error: deleted function 'virtual Frigo::Util::Arrays::~Arrays()'
/code/Frigo/Lang/NonInstantiable:39:11: error: overriding non-deleted function 'virtual Frigo::Lang::NonInstantiable::~NonInstantiable()'
Я подозреваюэто потому, что я не создаю никаких деструкторов, виртуальных или иных, в дочерних классах, и это как-то противоречит частному виртуальному деструктору NonInstantiable, но мне нужно подтверждение.И решение, как исправить мой NonInstantiable класс, чтобы подавить эти ошибки, но все еще работает.