// A bare-bones llvm::Optional reimplementation. template struct MyOptionalStorage { MyOptionalStorage(T val) : value(val), hasVal(true) {} MyOptionalStorage() {} T value; bool hasVal = false; }; template struct MyOptional { MyOptionalStorage Storage; MyOptional(T val) : Storage(val) {} MyOptional() {} T &operator*() { return Storage.value; } }; void stop() {} int main(int argc, char **argv) { MyOptional x, y = 42; stop(); // break here return *y; }