Annex F (informative) Core undefined behavior [ub]

F.3 [expr]: Expressions [ub.expr]

F.3.17[ub:expr.static.cast.fp.outside.range]
Specified in: [expr.static.cast]

An explicit conversion of a floating-point value that is outside the range of the target type has undefined behavior.
[Example 1: 
If float does not adhere to ISO/IEC 60559 and cannot represent positive infinity, a sufficiently large double value will be outside the (finite) range of float.
void f() { double d = FLT_MAX; d *= 16; float f = static_cast<float>(d); // undefined behavior } — end example]