#define MUST_USE_FUNC __attribute__((warn_unused_result))
#define MUST_USE_STRUCT __attribute__((warn_unused))
#define MUST_USE_ENUM /* nothing */


#include <cstdarg>
#include <cstdint>
#include <cstdlib>
#include <ostream>
#include <new>

template<typename T>
struct MUST_USE_STRUCT MaybeOwnedPtr {
  enum class MUST_USE_ENUM Tag : uint8_t {
    Owned,
    None,
  };

  struct Owned_Body {
    T *_0;
  };

  Tag tag;
  union {
    Owned_Body owned;
  };
};

template<typename T>
struct MUST_USE_STRUCT OwnedPtr {
  T *ptr;
};

extern "C" {

MUST_USE_FUNC MaybeOwnedPtr<int32_t> maybe_consume(OwnedPtr<int32_t> input);

} // extern "C"
