https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119624
--- Comment #5 from Pavel M <pavel.morozkin at gmail dot com> --- (In reply to Joseph S. Myers from comment #3) > because the lvalues are evaluated *relative to that expression* May be relevant (this is a fragment, see the full answer at https://stackoverflow.com/a/74876126/1778275): > Lvalue conversion nominally occurs during program execution, since it needs > the values stored in the bytes of an object. > the controlling expression is subject to all normal rules on validity of > expressions even though it's not evaluated at execution time Is there an official / normative definition of "not evaluated"? My preliminary thought is that "not evaluated" means that all relevant constraints shall be satisfied while the semantic rules are need not be satisfied (because C is statically typed, the type inference usually [VLA is the only exception?] doesn't depend on the semantics; in other words: types usually are known at translation time). For example, here I wonder whether "not evaluated" in the C standard always imply execution time: https://stackoverflow.com/questions/19435004/explanation-of-linux-kernel-field-sizeof-macro/19435087#comment140244962_19435087. I propose to create (if not yet created) an official / normative definition of "not evaluated".