#include #include #include #include "make_unique.h" struct C { private: struct private_type { }; C(private_type) { } int *m_i = nullptr; public: C() : C(private_type()) { m_i = new int; throw std::exception(); } ~C() { delete m_i; } C(C const&) = delete; C& operator=(C const&) = delete; }; struct D { std::unique_ptr m_i; D() : m_i(std::make_unique()) { m_i = std::make_unique(); throw std::exception(); } }; int main() { try { C c; } catch (...) { } auto a = std::make_unique(10); return 0; }