/* (c) 2014 Glen Joseph Fernandes Distributed under the Boost Software License, Version 1.0. http://boost.org/LICENSE_1_0.txt */ #include #include #include #include #include template class type { public: static int count; type() : value() { count++; } ~type() { count--; } private: T value; }; template int type::count = 0; template T* aligned_new() { void* p = boost::alignment::aligned_alloc(boost:: alignment::alignment_of::value, sizeof(T)); if (p) { return ::new(p) T(); } else { throw std::bad_alloc(); } } template void test() { type* p = aligned_new >(); BOOST_TEST(type::count == 1); boost::alignment::aligned_delete()(p); BOOST_TEST(type::count == 0); } class C { }; union U { }; int main() { test(); test(); test(); test(); test(); test(); test(); test(); test(); test(); test(); test(); test(); test(); return boost::report_errors(); }