The purpose is to do type punning both at runtime and at compile-time, with the same code, in such a way that works if your type has padding bits too (e.g. long double). And yes, bit_cast is the right tool for that.
The issue is mainly that you get differences in behavior between compiler versions (or even standards, if this is not a DR). This would be a sharp edge. It also adds cost: an implementation of bit_cast is currently permitted to copy over the bits from the source in their original state. Clearing the bits would add cost to existing code. Without two separate functions, you have no way of opting out of the cost.