diff --git a/src/util/uninitialized.hpp b/src/util/uninitialized.hpp
index 8e3613cd6b342b40c7f2cd76edfd4e7acec5c582..e8ea25c1c09c979e9b4bbf835bb822c3a15673fb 100644
--- a/src/util/uninitialized.hpp
+++ b/src/util/uninitialized.hpp
@@ -33,11 +33,11 @@ public:
     using reference = X&;
     using const_reference= const X&;
 
-    pointer ptr() { return reinterpret_cast<X*>(&data); }
-    const_pointer cptr() const { return reinterpret_cast<const X*>(&data); }
+    pointer ptr() { return static_cast<X*>(static_cast<void*>(&data)); }
+    const_pointer cptr() const { return static_cast<const X*>(static_cast<void*>(&data)); }
 
-    reference ref() { return *reinterpret_cast<X*>(&data); }
-    const_reference cref() const { return *reinterpret_cast<const X*>(&data); }
+    reference ref() { return *ptr(); }
+    const_reference cref() const { return *cptr(); }
 
     // Copy construct the value.
     template <