Чистый виртуальный деструктор по умолчанию

В С++ 11 мы можем объявить деструктор автоматически сгенерированным:

struct X {
  virtual ~X() = default;
};

Кроме того, мы можем объявить деструктор чистым виртуальным:

struct X {
  virtual ~X() = 0;
};

Мой вопрос: как объявить деструктор как автоматически сгенерированным, так и чистым виртуальным? Похоже, что следующий синтаксис неверен:

struct X {
  virtual ~X() = 0 = default;
};

Ни один из них:

struct X {
  virtual ~X() = 0, default;
};

И это одно:

struct X {
  virtual ~X() = 0 default;
};

EDIT: Некоторые разъяснения в отношении вопроса. В принципе, я хочу, чтобы пустой класс был неинтересным базовым классом, но производный класс является реальным, тогда класс должен иметь чистый виртуальный деструктор. Но, с другой стороны, я не хочу предоставлять определение в файле .cpp. Поэтому мне нужен какой-то механизм, эквивалентный default. Интересно, есть ли у кого-нибудь идея решить проблему.

Ответ 1

Чтобы определить чистый виртуальный метод, вам потребуется отдельное определение из декларации.

Таким образом:

struct X {
    virtual ~X() = 0;
};

X::~X() = default;