Warum kann ich eine Nicht-Constexpr-Funktion innerhalb einer Constexpr-Funktion aufrufen?

Betrachten Sie den folgenden Code:

#include <stdio.h>

constexpr int f()
{
    return printf("a side effect!\n");
}

int main()
{
    char a[f()];
    printf("%zd\n", sizeof a);
}

Ich hätte erwartet, dass der Compiler sich über den Aufruf von beschwertprintf Innerhalbf, daf sollte seinconstexpr, aberprintf ist nicht. Warum macht das Programmkompilieren und drucken 15?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage