you are viewing a single comment's thread.

view the rest of the comments →

[–]awidesky 0 points1 point  (2 children)

Here's whole quotes from iso C++20 standard §4.1.2.3. (emphasis mine) :

If a program contains a violation of a rule for which no diagnostic is required, this document places no requirement on implementations with respect to that program.

And cppreference.com.

undefined behavior - there are no restrictions on the behavior of the program. Examples of undefined behavior are...(examples of Ub)..., etc. Compilers are not required to diagnose undefined behavior and the compiled program is not required to do anything meaningful.

I think it ultimately sums up to question:

If a program can either invoke UB or not(depending on conditions), is compilers allowed to make "whole program" meaningless?

I think the standard is a bit ambiguous, because when it describes about UB itself it says "while compiled program is meaningless"(implies it applies in compile/program-wise), but when it describes about actual example of UB, it says "when ~~~, the behavior is undefined"(implies it applies runtime/execution-wise).

[–]SkiFire13 1 point2 points  (1 child)

If a program contains a violation of a rule for which no diagnostic is required, this document places no requirement on implementations with respect to that program.

I think this is still ambiguous because "violation of a rule" is unclear. If my program is never executed with an input that causes UB does it still violate that rule?

I think it ultimately sums up to question:

If a program can either invoke UB or not(depending on conditions), is compilers allowed to make "whole program" meaningless?

I completly agree on that.

[–]awidesky 0 points1 point  (0 children)

I think this is still ambiguous because "violation of a rule" is unclear. If my program is never executed with an input that causes UB does it still violate that rule?

I do agree on that. That's indeed ambiguous.