#include
using namespace std;
constexpr int f(bool b){ return b ? throw 0 : 0; } // OK
constexpr int f() { return f(true); } // Ill-Formed, No Di
Is this code correct (and there is a mistake in the Standard)
The standard is what decides if a program is "correct" i.e. well-formed. The standard explicitly says that the program is ill-formed.
or is it incorrect (and there is a bug in both Clang and GCC)?
The program is ill-formed (incorrect). Both clang and gcc are standard compliant in their observed behaviour.
Is it possible that a/this program is "ill-formed, no diagnostic required" and that the compilers are allowed to compile it successfully?
Yes. The standard doesn't require that an ill-formed program must fail to compile. It merely requires that the implementation issues at least one diagnostic message, if the program violates the rules. Some rules are not diagnosable, and diagnostic is not required if such rules are violated.
In fact, the rule is considered "not diagnosable" because it would be very difficult for the compiler to prove (in general) that the rule is violated. It is quite typical that "no diagnostic required" rule violations compile successfully.
If an ill-formed program does compile, the standard does not specify how such program should behave.