Рассмотрим следующий код:
#include <iostream>
class Test
{
public:
constexpr Test(const int x) : _x(x) {}
constexpr int get() const {return _x;}
~Test() {} // HERE
protected:
const int _x;
};
int main()
{
static constexpr Test test(5);
return 0;
}
Если я удаляю строку HERE
, код компилируется хорошо, но если я определяю пустой деструктор, это приводит к ошибке компиляции, говорящей, что Test
не является литералом.
Почему и в чем разница между пустым деструктором и отсутствием деструктора вообще?
РЕДАКТИРОВАТЬ: Еще один связанный с этим вопрос: если пустые и буквальные деструкторы отличаются, как определить защищенный литеральный деструктор?
~Test() = default;
, я думаю. - person Xeo   schedule 10.01.2013protected
вместо деструктора? - person Konrad Rudolph   schedule 10.01.2013