> > > cout<<(500000000*7); > > Quotation from ISO/IEC 14882:1998(E), Chapter 5 (Expressions): > > | 5 If during the evaluation of an expression, the result is not > > | mathematically defined or not in the range of representable values > > | for its type, the behavior is undefined, unless such an expression is > > | a constant expression (5.19), in which case the program is ill-formed. > > The standard doesn't mention that no diagnonstic is required, so > > conforming implementations have to refuse to compile this program. > The standard does not have to mention that no diagnostic is required > if undefined behavior is involved. A diagnostic is never required for > undefined behavior. Among other things, requiring a diagnostic would > be defining a behavior. The point here is that (500000000*7) is a constant expression (would someone who has read �5.19 please confirm this?) and the program is therefore ill-formed. The wording of the passage quoted above contrasts this situation with the more general case where the behavior is undefined; one is therefore tempted to read it as meaning that a diagnostic *is* required in this particular case.