summaryrefslogtreecommitdiff
path: root/test.cpp
blob: e373bff5d57f98233ca38c8ffaab55af3619cd9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
char const *s = R"(
Lorem ipsum dolor sit amet.
It was the age of reason.
It was the age of foolishness.
do {
	class x;
} while (0.1238712e+12 != CHAR_MAX);
)";
using std::cout;

template<typename T>
class Option {
public:
	Option<T>() {
		exists = false;
	}
	Option<T>(T const &t) {
		set(t);
	}
	void set(T const &t) {
		exists = true;
		x = t;
	}
	void clear() {
		exists = false;
	}
	T *get() {
		if (exists)
			return &x;
		else
			return nullptr;
	}
	T const *get() const {
		if (exists)
			return &x;
		else
			return nullptr;
	}
private:
	bool exists;
	T x;
};

template<typename T>
void print_option(Option<T> const &o) {
	T const *ptr = o.get();
	if (ptr)
		cout << *ptr << "\n";
	else
		cout << "None\n";
}

int main() {
	Option<int> o(7);
	print_option(o);
	o.clear();
	print_option(o);
	o.set(133);
	print_option(o);
	return 0;
}