// WARNING: This file is machine generated by fidlgen.

#include <fidl/test/arrays/llcpp/fidl.h>

#include <memory>

namespace llcpp {

namespace fidl {
namespace test {
namespace arrays {

void ::llcpp::fidl::test::arrays::UnionSmallArray::
    SizeAndOffsetAssertionHelper() {
  static_assert(sizeof(UnionSmallArray) == sizeof(fidl_xunion_t));
  static_assert(offsetof(UnionSmallArray, ordinal_) ==
                offsetof(fidl_xunion_t, tag));
  static_assert(offsetof(UnionSmallArray, envelope_) ==
                offsetof(fidl_xunion_t, envelope));
}

void ::llcpp::fidl::test::arrays::UnionLargeArray::
    SizeAndOffsetAssertionHelper() {
  static_assert(sizeof(UnionLargeArray) == sizeof(fidl_xunion_t));
  static_assert(offsetof(UnionLargeArray, ordinal_) ==
                offsetof(fidl_xunion_t, tag));
  static_assert(offsetof(UnionLargeArray, envelope_) ==
                offsetof(fidl_xunion_t, envelope));
}

}  // namespace arrays
}  // namespace test
}  // namespace fidl
}  // namespace llcpp
