1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>

class Foo {
 public:
  Foo() {
    g();
  }
  virtual void f() = 0;
  void g() {
    f();
  }
};

class Frob : public Foo {
 public:
  virtual void f() {
    std::cout << "Hello Frob::f!\n";
  }
};

int main(int argc, char* argv) {
  Foo* f = new Frob;
  f->f();
}

// Output:
//   pure virtual method called
//   terminate called without an active exception
//   Abort trap