A class's virtual functions shall not be invoked from its destructor or any of its constructors
// CallExpr [ isClassMember() ] [ isVirtual() ] [ ancestor::FuncBody / parent::* [ isConstructor() | isDestructor() ] ]
1 class base{ 2 public: 3 base(int, int); 4 ~base(); 5 void xyz(); 6 virtual void display() 7 int x = 5; 8 }; 9 10 base::base (int a, int b) { 11 display(); // MATCHES 12 xyz(); 13 } 14 base::~base() { 15 display(); // MATCHES 16 xyz(); 17 } 18 class derived : public base { 19 20 public: 21 void display() 22 int y = 0; 23 }; 24 25 void main() { 26 base *ptr = new derived(); 27 ptr->display(); 28 }