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 @ globFoobjeto, mas foi inicializado dinamicamente e causou um problema devido ao "fiasco da ordem de inicialização estática"

questionAnswers(1)

yourAnswerToTheQuestion