“You’re all ignoring the actual definition and focusing on the note, The standard imposes no requirements.” – @R.MartinhoFernandes
The message above was written by the given user in Lounge<C++> and makes a very valid argument; the standard doesn’t impose any requirements when it comes to code that invokes undefined behavior.
! ! !
undefined-behavior stretches even to the far corner of parsing the input data (ie. code) by the compiler, as verified with the below quotations from both the C++11 and C99 standards.
To answer your question with one sentence;
- undefined behavior is not limited to runtime execution, and it’s permissible to crash during compilation “in a documented manner characteristic of the environment” 1
“in a documented manner characteristic of the environment” is a kind of odd statement, you could pretty much write a compiler documenting that it might crash upon any given code (that’s invalid) to grant it the possibility to crash whenever it wants to.
1. quote from the C++11/C99 standards
###c++11
###1.3.24 [defns.undefined]
Undefined behavior; behavior for which this International Standard
imposes no requirements
[ Note:
Undefined behavior may be expected
when this International Standard omits any explicit definition of
behavior or when a program uses an erroneous construct or erroneous
data.Permissible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation
or program execution in a documented manner characteristic of the
environment (with or without the issuance of a diagnostic message), to
terminating a translation or execution (with the issuance of a
diagnostic message).Many erroneous program constructs do not engender undefined behavior;
they are required to be diagnosed.
— end note ]
###c99
3.4.3 – Undefined Behavior
behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this >International Standard imposes no requirements
NOTE Possible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation
or program execution in a documented manner characteristic of the
environment (with or without the issuance of a diagnostic message), to
terminating a translation or execution (with the issuance of a
diagnostic message).