xref: /llvm-project/lldb/test/Shell/ScriptInterpreter/Python/Inputs/FormatterBytecode/MyOptional.cpp (revision fffe8c668461e73055182f229765cb7de908e295)
1*fffe8c66SAdrian Prantl // A bare-bones llvm::Optional reimplementation.
2*fffe8c66SAdrian Prantl 
3*fffe8c66SAdrian Prantl template <typename T> struct MyOptionalStorage {
4*fffe8c66SAdrian Prantl   MyOptionalStorage(T val) : value(val), hasVal(true) {}
5*fffe8c66SAdrian Prantl   MyOptionalStorage() {}
6*fffe8c66SAdrian Prantl   T value;
7*fffe8c66SAdrian Prantl   bool hasVal = false;
8*fffe8c66SAdrian Prantl };
9*fffe8c66SAdrian Prantl 
10*fffe8c66SAdrian Prantl template <typename T> struct MyOptional {
11*fffe8c66SAdrian Prantl   MyOptionalStorage<T> Storage;
12*fffe8c66SAdrian Prantl   MyOptional(T val) : Storage(val) {}
13*fffe8c66SAdrian Prantl   MyOptional() {}
14*fffe8c66SAdrian Prantl   T &operator*() { return Storage.value; }
15*fffe8c66SAdrian Prantl };
16*fffe8c66SAdrian Prantl 
17*fffe8c66SAdrian Prantl void stop() {}
18*fffe8c66SAdrian Prantl 
19*fffe8c66SAdrian Prantl int main(int argc, char **argv) {
20*fffe8c66SAdrian Prantl   MyOptional<int> x, y = 42;
21*fffe8c66SAdrian Prantl   stop(); // break here
22*fffe8c66SAdrian Prantl   return *y;
23*fffe8c66SAdrian Prantl }
24