A inicialização de um declarador de ponteiro com um comportamento indefinido de ponteiro inválido?

Em resumo, o código a seguir é considerado como tendo comportamento indefinido?

int main()
{
    int *p = <some invalid pointer value>;
}

Para um exemplo de compilação, use o seguinte código:

int main()
{
    int *p = new int;
    delete p; // Now p has an invalid pointer value.
    int *q = p; // UB?
}

Eu fiz algumas pesquisas sobre o tópico, então essas são as informações relevantes que encontrei até agora:

Um valor de ponteiro (de acordo comcppreference) pode ser um dos seguintes:

Um ponteiro para um objeto ou função;Um ponteiro após o final de um objeto;O valor nulo do ponteiro;Um valor de ponteiro inválido.

Além disso, de acordo com a cppreference,

O direcionamento através de um valor de ponteiro inválido e a passagem de um valor de ponteiro inválido para uma função de desalocação têm um comportamento indefinido. Qualquer outro uso de um valor de ponteiro inválido possui um comportamento definido pela implementação.

Esta discussão aborda alguns usos de ponteiros inválidos. Especificamente,esta resposta menciona oDocumento de justificativa (C99), que possui o seguinte parágrafo (seção 6.3.2.3):

Independentemente de como um ponteiro inválido é criado, qualquer uso dele gera um comportamento indefinido. Mesmo a atribuição, comparação com uma constante de ponteiro nulo ou comparação consigo mesma, em alguns sistemas, pode resultar em uma exceção.

Não sei ao certo qual é a situação do C ++, mas considero que, dadas as respostas no segmento vinculado,usa de ponteiros inválidos resultam em comportamento indefinido. Note, porém, quetarefa não é o mesmo queinicialização, então não tenho certeza se a inicialização é considerada um uso.

questionAnswers(1)

yourAnswerToTheQuestion