Pure virtual destructor should be defined too.
Relevant quote from N3376 12.4/9
A destructor can be declared virtual or pure virtual; if any objects of that class or any derived class are created in the program, the destructor shall be defined.
class AnyThreadImplementation {
public:
virtual void launch() = 0;
virtual ~AnyThreadImplementation() = 0;
};
AnyThreadImplementation::~AnyThreadImplementation() {}