diff --git a/string.hpp b/string.hpp
index 4a43206e3ed3656c8792b1241de33f0fd55069e6..cdb05ad2338607dd8658413cd37a2e54532481ec 100644
--- a/string.hpp
+++ b/string.hpp
@@ -20,6 +20,7 @@
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
+#include <cstdint>
 #include <stdexcept>
 #include <sstream>
 #include <type_traits>
diff --git a/test.hpp b/test.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..620cf70d4c05ac5e75bd2b7638a9cbfcb0bdf981
--- /dev/null
+++ b/test.hpp
@@ -0,0 +1,19 @@
+#include <rlib/macro.hpp>
+#include <rlib/string.hpp>
+#include <stdexcept>
+#include <cerrno>
+#include <string>
+
+namespace rlib::details {
+struct die_impl {
+    explicit die_impl(std::string hint_str) : msg(std::move(hint_str)) {}
+    auto operator=(const long &syscall_res) const {
+        if(syscall_res < 0)
+            throw std::runtime_error(rlib::string("Dead. {}. System call returns {}, errno={}, strerror={}").format(msg, syscall_res, errno,
+                                                                                                     strerror(errno)));
+    }
+    std::string msg;
+};
+}
+#define die_on_fail rlib::details::die_impl(std::string(__FILE__ ":" RLIB_MACRO_TO_CSTR(__LINE__))) =
+
diff --git a/test/src/test.cc b/test/src/test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8a6db93b8f6f4e91ac5a8259dfba1a1a1790c47b
--- /dev/null
+++ b/test/src/test.cc
@@ -0,0 +1,6 @@
+#include <rlib/test.hpp>
+
+int main() {
+    die_on_fail 0;
+}
+