Isso é um inseto? O construtor Constexpr se torna silenciosamente não constexpr
Veja este código:
struct NonConstexpr {
NonConstexpr() { }
};
template <typename T>
struct Bar {
NonConstexpr nonConstexpr;
constexpr Bar() { }
};
struct Foo {
Bar<void> bar;
constexpr Foo() { }
};
Foo
tem um membro,Foo::bar::nonConstexpr
, que possui um construtor não constexpr. Então, minha expectativa é que isso não seja compilado. Mas ele compila com gcc, clang e msvc. Isso é um bug do compilador ou alguma regra permite que esse código seja compilado?
Se eu adicionar umNonConstexpr
membro emFoo
diretamente, o código não compila mai
(Eu tenho esse problema, porque esperava uma inicialização estática para um @ globFoo
bjeto, mas foi inicializado dinamicamente e causou um problema devido ao "fiasco da ordem de inicialização estática"