por qué declarar constructores constrexpr para clases con destructores no triviales (por ejemplo, unique_ptr, std :: variant)

Por lo que yo entiendo (al menos parac++14), un destructor no puede serconstexpr si no es trivial (generado implícitamente o=default) ¿Cuál es el punto de declararconstexpr constructores para estructuras con destructores no triviales?

struct X {
  int a_;

  constexpr X(int a) : a_{a} {}

  // constexpr ~X(){}; // Error dtor cannot be marked constexpr
  // ~X(){}; // causes  error at y declaration: temporary of non-literal type ‘X’
             // in a constant expression .
};

template <int N> struct Y {};

int main() {
  Y<X{3}.a_> y; // OK only if the destructor is trivial
  (void)y;
}
// tested with c++14 g++-5.1.0 and clang++ 3.5.0

Por ejemplostd::unique_ptr Tiene algunosconstructores constexpr (predeterminado ynullptr_t), aunque el destructor está obviamente definido explícitamente (seguro que no tiene efectos si el objeto esnullptr, pero eso no significa que todavía tiene un destructor definido explícitamente para verificar si el objeto está en un estado vacío, y como he visto, incluso un destructor vacío no permite que se use un objeto en una expresión de compilación constante)

Otro ejemplo es la propuesta destd :: variante: tiene casi todos los constructoresconstexpr aunque el destructor tiene la firma~variant() y tiene quecall get<T_j> *this).T_j::~T_j() with j being index().

¿Qué me estoy perdiendo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta