A ordem de inicialização das variáveis de modelo constexpr (isto é, inicializadas constantemente) é garantida?

Dept.cppreference.com/w/cpp/language/initialization:

Inicialização dinâmica não ordenada, que[sic] aplica-se apenas a membros de dados estáticos do modelo de classe (estático / thread-local) e modelos de variáveis (desde C ++ 14) que não são explicitamente especializados.

Portanto, os modelos estáticos parecem vulneráveis a uma versão ainda pior doFiasco da ordem de inicialização estática (TSIOF) (ou seja, não ordenado em uma unidade de tradução).

O uso do constexpr remove esta vulnerabilidade?

ou seja, é a saída do código abaixogarantido ser estarsuccess?

Obviamente, devido à natureza dessa pergunta, exemplos de trabalho não serão suficientes como respostas; seriam necessárias citações do padrão. (C ++ 17 respostas preferenciais)

#include<cassert>

template<class T> static constexpr T a = 41;
template<class T> static constexpr T b = a<T>+1;
int main(){
    assert(b<int> == 42);
    std::cout <<"success\n";
}

BTW, se alguém é especialista nisso, eu tenho uma pergunta não respondida relacionada (que seria fácil para um especialista responder)aqui. Além disso, quais seriam as implicações aqui se a resposta paraminha outra pergunta é negativo (ou seja, constexpr não ajuda nas unidades de tradução)?

ATUALIZAÇÃO: preciso esclarecer qual é a minha preocupação aqui. O título da pergunta original perguntava se a ordem de inicialização é uma preocupação para variáveis de modelo constexpr. Eu esclareci isso. Não estou preocupado se a inicialização dinâmica está ocorrendo no exemplo; não é. Minha preocupação é que, como a inicialização ordenada não pode ser assumida no caso de inicialização dinâmica, ela pode ser assumida no caso de inicialização constante? Antes de ver o comportamento das variáveis de modelo inicializadas dinamicamente (dentro da mesma unidade de tradução), eu nunca pensaria nisso. No entanto, como as variáveis de modelo de duração estática, inicializadas dinamicamente, não fornecem inicialização ordenada, agora não vejo razão para supor que as variáveis de modelo de duração estática, iniciadas constantemente, também tenham garantido a inicialização ordenada. Eu preciso ter 100% de certeza de que a inicialização constante das variáveis do modelo ocorre na ordem de sua definição em uma TU.

Novamente, não vejo razão para supor que o inicializador constante dentro do compilador seja necessário para inicializar em ordem, se o inicializador dinâmico não for. Ausência de um aviso no padrão de que a inicialização constante não é ordenada não é suficiente.

Sei que alguns podem pensar que isso é uma preocupação excessiva, mas estou trabalhando em software crítico para a segurança e minha empresa suspendeu a adoção do C ++ 14 até que esse problema fosse resolvido.

questionAnswers(1)

yourAnswerToTheQuestion