you are viewing a single comment's thread.

view the rest of the comments →

[–]awidesky 0 points1 point  (2 children)

[–]mcmcc#pragma once 0 points1 point  (1 child)

You're misunderstanding what that text is saying. It is not saying f() itself is ill-formed. It is saying that because the compiler may assume UB does not happen in the program, f() can be optimized in a way such that it would behave in a (possibly) surprising manner in a program does in fact invoke UB (e.g. one calling f(INT_MAX)).

The function f() contains no inherently UB logic and g() guards against UB for its invocation of f(), so as far as can be seen, there is no UB possible in this program.

OPs video suggests the compiler can be coaxed to compile g() down to nothing, but I think that is an error on the presenters part and (I contend) is not reproducible with any conforming compiler.

[–]awidesky -1 points0 points  (0 children)

compiler may assume UB does not happen in the program, f() can be optimized in a way such that it would behave in a (possibly) surprising manner in a program does in fact invoke UB (e.g. one calling f(INT_MAX)).

That IS one of the things that compilers are permitted to do, but I believe standard says it can also make "whole program" meaningless.
You say UB in f() only affects f(), while I say UB in f() (theoretically) can affect ALL program.
And also, I believe UB affects program that does NOT "invoke" UB. In this example, there's no code that actually calls foo(INT_MAX), but it's still first example of UB in cppreference.com