C++20 introduced [std::bit\_cast](https://en.cppreference.com/w/cpp/numeric/bit_cast) for treating the same bits as if they were a different type. So, basically it does this:

```
template <typename T1, typename T2>
T2 undefined_bit_cast(T1 v1) {
    T1 *p1 = &v1;
    T2 *p2 = (T2 *)p1; // Uh oh.
    T2 v2 = *p2; // Oh no! Don't do that!
    return v2;
}

```

except without the undefined behavior that allows a compiler to replace this method with a hard drive deletion method.

I would like to use std::bit\_cast, but I'm stuck using C++11. How do I correctly implement my own `custom_bit_cast`, using no undefined behavior, without using the actual `std::bit_cast`?

Followup question: is there a pointer bit cast? A safe way to have a `T1 *` and a `T2 *` pointing at the same location, and be able to read and write from both, without it being undefined behavior?