aboutsummaryrefslogtreecommitdiff
path: root/Maybe.h
diff options
context:
space:
mode:
Diffstat (limited to 'Maybe.h')
-rw-r--r--Maybe.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/Maybe.h b/Maybe.h
new file mode 100644
index 0000000..df12478
--- /dev/null
+++ b/Maybe.h
@@ -0,0 +1,21 @@
+#pragma once
+
+template <typename T>
+class Maybe{
+ typedef struct {
+ T v;
+ } t_v_wrapper;
+
+ bool is_something;
+ t_v_wrapper *wr;
+public:
+ Maybe(void):is_something(false),wr(nullptr){}
+ Maybe(const T &_v):is_something(true),wr(new t_v_wrapper({_v})){}
+
+ operator bool() const{return this->is_something;}
+
+ T value(void){
+ if(is_something)return wr->v;
+ throw "Nothing";
+ }
+};