26 Numerics library [numerics]

26.5 Bit manipulation [bit]

26.5.3 Function template bit_­cast[bit.cast]

template<class To, class From> constexpr To bit_cast(const From& from) noexcept;
Constraints:
• sizeof(To) == sizeof(From) is true;
• is_­trivially_­copyable_­v<To> is true; and
• is_­trivially_­copyable_­v<From> is true.
Returns: An object of type To.
Implicitly creates objects nested within the result ([intro.object]).
Each bit of the value representation of the result is equal to the corresponding bit in the object representation of from.
Padding bits of the result are unspecified.
For the result and each object created within it, if there is no value of the object's type corresponding to the value representation produced, the behavior is undefined.
If there are multiple such values, which value is produced is unspecified.
A bit in the value representation of the result is indeterminate if it does not correspond to a bit in the value representation of from or corresponds to a bit of an object that is not within its lifetime or has an indeterminate value ([basic.indet]).
For each bit in the value representation of the result that is indeterminate, the smallest object containing that bit has an indeterminate value; the behavior is undefined unless that object is of unsigned ordinary character type or std​::​byte type.
The result does not otherwise contain any indeterminate values.
Remarks: This function is constexpr if and only if To, From, and the types of all subobjects of To and From are types T such that:
• is_­union_­v<T> is false;
• is_­pointer_­v<T> is false;
• is_­member_­pointer_­v<T> is false;
• is_­volatile_­v<T> is false; and
• T has no non-static data members of reference type.