¿Cómo puedo detectar que un constructor es realmente constexpr, para poder utilizar la inicialización estática?
Mire este código:
struct NonConstexpr {
NonConstexpr() { }
};
template <typename T>
struct Bar {
NonConstexpr nonConstexpr;
constexpr Bar() { }
};
struct Foo {
Bar<void> bar;
constexpr Foo() { }
};
En este código,Foo
l constructor de @ está etiquetado comoconstexpr
, pero no puede aparecer en una expresión constante, ya que en realidad no cumple con los requisitos de esto. Puedes leer los detalles de esto en miPregunta anterio.
Mi pregunta es: ¿puedo detectar de alguna manera el tiempo de compilación, queFoo
l constructor de @ en realidad no se comportará comoconstexpr
?
La razón por la que pregunto esto, me gustaría detectar que una variable global deFoo
se inicializará estáticamente o no (me gustaría poner unstatic_assert
en esto, como mi @ globFoo
objeto debe inicializarse estáticamente).
Nota, esa es la solución directa, para agregar temporalmenteconstexpr
a la variable no funciona, ya que miFoo
tiene un destructor no trivial.