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

// fidl_experiment = output_index_json

#include <fidl/test.nullable/cpp/wire_types.h>

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"

#ifdef __Fuchsia__
void ::test_nullable::wire::StructWithNullableHandle::_CloseHandles() {
  val.reset();
}

#endif  // __Fuchsia__

#ifdef __Fuchsia__
void ::test_nullable::wire::StructWithNullableProtocol::_CloseHandles() {
  val.reset();
}

#endif  // __Fuchsia__

#ifdef __Fuchsia__
void ::test_nullable::wire::StructWithNullableRequest::_CloseHandles() {
  val.reset();
}

#endif  // __Fuchsia__

void ::test_nullable::wire::SimpleUnion::SizeAndOffsetAssertionHelper() {
  static_assert(sizeof(SimpleUnion) == sizeof(fidl_union_t));
  static_assert(offsetof(SimpleUnion, ordinal_) == offsetof(fidl_union_t, tag));
  static_assert(offsetof(SimpleUnion, envelope_) == offsetof(fidl_union_t, envelope));
}

#pragma clang diagnostic pop
