次のコードを検討してください。
#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
空のデストラクタとまったくないデストラクタの違いはなぜですか?
編集:別の関連する質問:空のデストラクタとリテラルデストラクタが異なる場合、保護されたリテラルデストラクタを定義する方法は?