http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55367
Bug #: 55367 Summary: Probably problem with c++ vptr under templates and multiple ihenritance Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: critical Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: wri...@email.com Created attachment 28720 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28720 code snippet Hello, I have some code that compile and work fine in gcc 4.6.2 (without tne new keyword "override" ) but in version 4.7.2 it complie generate access violation runtime. under windows platform. So, i need some help, thank you very much: #include <iostream> using namespace std; struct Entity { //~Entity() = default; //work fine ~Entity() {} //when i specified my destructor this compile but generate runtime access viloation }; template<typename T> struct IRepository { virtual T g() = 0; }; struct OtherInterface{ virtual void y() = 0; }; struct IEntityRepository : public virtual IRepository<Entity>{ }; template<typename T> struct RepositoryBase : public virtual IRepository<T>, public OtherInterface{ virtual void y() override { cout << "y() override called" << endl; } }; template<typename T> struct DataRepository : public RepositoryBase<T>{ virtual T f() { cout << "f() called" << endl; this->y(); T t; return t; } T g() override { cout << "g() override called" << endl; ////when i specified my destructor for class Entity this compile but generate runtime access viloation here : on this: probably problem with vptr return this->f(); } }; struct EffectiveEntityRepository : public DataRepository<Entity>, public IEntityRepository{ }; int main() { IEntityRepository* var = new EffectiveEntityRepository(); var->g(); return 1; }