Valid C++?

  • Thread starter andrew queisser
  • Start date
T

Tom Widmer

Alf said:
* Tom Widmer:



(Note: the above isn't really a demonstration, because it's a type-id
argument, and the standard's comment about "evaluated" only applies to
sizeof expression argument; however, a corresponding expression arg
example is easily produced, and was shown earlier.)

Well, both evaluated and not evaluated is a contradiction.

Actually, I think I was wrong. 4000/2 isn't evaluated after all.
It seems that you resolve it by postulating a special case for constant
expressions -- but where is that special case in the standard?

Luckily, the special case is made:
3.2/2 again:
"An expression is potentially evaluated unless it appears where an
integral constant expression is required ..."

That implies that the 4000/2 isn't actually evaluated, and instead the
compiler presumably magically knows the value of it.

Finally, 5/5 says that mathematically undefined constant expressions are
actually ill-formed, not UB.

So the contradiction is cleared up I think.
I resolve it by taking "evaluated" to mean "evaluated at run-time", in
that context (context: the standard's definition of sizeof).

I think Occam's razor would agree with me.

If it were still alive & sharp. ;-)


[snip]
I think 1.9/5 makes it clear that it must be possible for the
operation to be part of a permissible execution sequence before the
program actually has UB.


The question seems to be whether there is such a thing as pure compile
time UB: something that's never actually executed, can never be
executed, and yet is clearly defined as UB by the standard?

And yes, there is.

Yes - another example is template related violations of the ODR.
So it's not the case that whatever causes UB, must be part of a
permissible execution sequence before the program actually has UB.

No, I agree with that, but I also think the standard is clear that the
various examples are not UB. If it isn't clear enough, I think a defect
report (or at least improvements for C++0x) would be good, since I think
it's certainly the intent that you don't get UB for undefined
expressions unless one of the possibly execution sequences evaluates the
undefined expression.

Tom
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,040
Latest member
papereejit

Latest Threads

Top