--- /dev/null
+#ifndef __STDEX_MEMORY_H__
+#define __STDEX_MEMORY_H__
+
+#include <memory>
+
+namespace stdex
+{
+
+template <typename T, typename... Args> std::unique_ptr<T> make_unique(Args &&... args)
+{
+ // NOTE std::make_unique is missing in C++11 standard
+ return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
+}
+
+} // namespace stdex
+
+#endif // __STDEX_MEMORY_H__
--- /dev/null
+#include "stdex/Memory.h"
+
+#include <gtest/gtest.h>
+
+namespace
+{
+
+struct Stat
+{
+ unsigned allocated = 0;
+ unsigned freed = 0;
+};
+
+struct Counter
+{
+public:
+ Counter(Stat *stat) : _stat{stat} { _stat->allocated += 1; }
+
+public:
+ ~Counter() { _stat->freed += 1; }
+
+private:
+ Stat *_stat;
+};
+
+} // namespace
+
+TEST(MemoryTest, make_unique)
+{
+ Stat stat;
+
+ ASSERT_EQ(stat.allocated, 0);
+ ASSERT_EQ(stat.freed, 0);
+
+ auto o = stdex::make_unique<::Counter>(&stat);
+
+ ASSERT_EQ(stat.allocated, 1);
+ ASSERT_EQ(stat.freed, 0);
+
+ o.reset();
+
+ ASSERT_EQ(stat.allocated, 1);
+ ASSERT_EQ(stat.freed, 1);
+}