Index: src/libcfa/containers/maybe
===================================================================
--- src/libcfa/containers/maybe	(revision 79308c8e374920c0ae0843de7e5c3c35b83ff992)
+++ src/libcfa/containers/maybe	(revision 64fc0bafc25144f94bd5bbd4794fdbef138cdd9f)
@@ -18,9 +18,10 @@
 #define MAYBE_H
 
+#include <stdbool.h>
 
 // DO NOT USE DIRECTLY!
 forall(otype T)
 struct maybe {
-    _Bool has_value;
+    bool has_value;
     T value;
 };
@@ -40,5 +41,5 @@
 
 forall(otype T)
-_Bool ?!=?(result(T, E) this, zero_t);
+bool ?!=?(maybe(T) this, zero_t);
 
 forall(otype T)
@@ -49,5 +50,5 @@
 
 forall(otype T)
-_Bool has_value(maybe(T) * this);
+bool has_value(maybe(T) * this);
 
 forall(otype T)
Index: src/libcfa/containers/maybe.c
===================================================================
--- src/libcfa/containers/maybe.c	(revision 79308c8e374920c0ae0843de7e5c3c35b83ff992)
+++ src/libcfa/containers/maybe.c	(revision 64fc0bafc25144f94bd5bbd4794fdbef138cdd9f)
@@ -40,25 +40,25 @@
 void ^?{}(maybe(T) * this) {
 	if (this->has_value) {
-		^(this->value){};
+		^(&this->value){};
 	}
 }
 
 forall(otype T)
-_Bool ?!=?(result(T, E) this, zero_t) {
-	return !this->has_value;
+bool ?!=?(maybe(T) this, zero_t) {
+	return !this.has_value;
 }
 
 forall(otype T)
 maybe(T) maybe_value(T value) {
-	return (Maybe(T)){value};
+	return (maybe(T)){value};
 }
 
 forall(otype T)
 maybe(T) maybe_none() {
-	return (Maybe(T)){};
+	return (maybe(T)){};
 }
 
 forall(otype T)
-_Bool has_value(maybe(T) * this) {
+bool has_value(maybe(T) * this) {
 	return this->has_value;
 }
Index: src/libcfa/containers/result
===================================================================
--- src/libcfa/containers/result	(revision 79308c8e374920c0ae0843de7e5c3c35b83ff992)
+++ src/libcfa/containers/result	(revision 64fc0bafc25144f94bd5bbd4794fdbef138cdd9f)
@@ -18,13 +18,17 @@
 #define RESULT_H
 
+#include <stdbool.h>
 
 // DO NOT USE DIRECTLY!
 forall(otype T, otype E)
+union inner_result{
+	T value;
+	E error;
+};
+
+forall(otype T, otype E)
 struct result {
-	_Bool has_value;
-	union {
-		T value;
-		E error;
-	};
+	bool has_value;
+	inner_result(T, E);
 };
 
@@ -46,5 +50,5 @@
 
 forall(otype T, otype E)
-_Bool ?!=?(result(T, E) this, zero_t);
+bool ?!=?(result(T, E) this, zero_t);
 
 forall(otype T, otype E)
@@ -55,5 +59,5 @@
 
 forall(otype T, otype E)
-_Bool has_value(result(T, E) * this);
+bool has_value(result(T, E) * this);
 
 forall(otype T, otype E)
Index: src/libcfa/containers/result.c
===================================================================
--- src/libcfa/containers/result.c	(revision 79308c8e374920c0ae0843de7e5c3c35b83ff992)
+++ src/libcfa/containers/result.c	(revision 64fc0bafc25144f94bd5bbd4794fdbef138cdd9f)
@@ -21,5 +21,5 @@
 void ?{}(result(T, E) * this) {
 	this->has_value = false;
-	(this->error){};
+	(&this->error){};
 }
 
@@ -49,27 +49,27 @@
 void ^?{}(result(T, E) * this) {
 	if (this->has_value) {
-		^(this->value){};
+		^(&this->value){};
 	} else {
-		^(this->error){};
+		^(&this->error){};
 	}
 }
 
 forall(otype T, otype E)
-_Bool ?!=?(result(T, E) this, zero_t) {
-	return !this->has_value;
+bool ?!=?(result(T, E) this, zero_t) {
+	return !this.has_value;
 }
 
 forall(otype T, otype E)
 result(T, E) result_value(T value) {
-	return (Result(T, E)){1, value};
+	return (result(T, E)){1, value};
 }
 
 forall(otype T, otype E)
 result(T, E) result_error(E error) {
-	return (Result(T, E)){0, value};
+	return (result(T, E)){0, error};
 }
 
 forall(otype T, otype E)
-_Bool has_value(result(T, E) * this) {
+bool has_value(result(T, E) * this) {
 	return this->has_value;
 }
@@ -77,5 +77,5 @@
 forall(otype T, otype E)
 T get(result(T, E) * this) {
-    assertf(this->has_value, "attempt to get from result without value");
+	assertf(this->has_value, "attempt to get from result without value");
 	return this->value;
 }
@@ -83,5 +83,5 @@
 forall(otype T, otype E)
 E get_error(result(T, E) * this) {
-    assertf(this->has_value, "attempt to get from result without error");
+	assertf(this->has_value, "attempt to get from result without error");
 	return this->error;
 }
