In C++11, we are able to declare a destructor to be auto generated:
struct X { virtual ~X() = default; };
Also, we can declare a destruct
In order to define a pure virtual method, you need a separate definition from the declaration.
Therefore:
struct X { virtual ~X() = 0; }; X::~X() = default;