#define MUST_USE_FUNC __attribute__((warn_unused_result)) #define MUST_USE_STRUCT __attribute__((warn_unused)) #define MUST_USE_ENUM /* nothing */ #include #include #include #include #include template 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 struct MUST_USE_STRUCT OwnedPtr { T *ptr; }; extern "C" { MUST_USE_FUNC MaybeOwnedPtr maybe_consume(OwnedPtr input); } // extern "C"