| // PR c++/98193 |
| // { dg-do compile { target c++20 } } |
| |
| template <typename To, typename From> |
| constexpr To |
| bit_cast (const From &from) |
| { |
| return __builtin_bit_cast (To, from); |
| } |
| |
| struct J |
| { |
| long int a, b : 11, h; |
| }; |
| |
| struct K |
| { |
| long int a, b : 11, c; |
| constexpr bool operator == (const K &x) |
| { |
| return a == x.a && b == x.b && c == x.c; |
| } |
| }; |
| |
| struct L |
| { |
| long long int a, b : 11, h; |
| }; |
| struct M |
| { |
| long long int a, b : 11, c; |
| constexpr bool operator == (const M &x) |
| { |
| return a == x.a && b == x.b && c == x.c; |
| } |
| }; |
| |
| static_assert (bit_cast <K> (J{}) == K{}, ""); |
| static_assert (bit_cast <M> (L{0x0feedbacdeadbeefLL}) == M{0x0feedbacdeadbeefLL}, ""); |