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

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

#include <memory>

void ::fidl_test_arrays::wire::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 ::fidl_test_arrays::wire::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));
}
