// 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}, "");
