#include <iostream>
    #include <memory.h>
 
    struct B {
        B() { std::cout << "B()" << std::endl; }
        ~B() { std::cout << "~B()" << std::endl; }
    };
 
    int main()
    {
        std::cout << "start main" << std::endl;
        { // scope
            std::cout << "start scope" << std::endl;
            B b;
            std::cout << "end scope" << std::endl;
        } // end scope, b gets auto-destroyed.
        std::cout << "end of first example." << std::endl << std::endl ;
 
        { // scope
            std::cout << "start scope" << std::endl;
            void* stackStorage = alloca(sizeof(B));
            std::cout << "alloca'd" << std::endl;
            B* b = new (stackStorage) B();
            std::cout << "ctord" << std::endl;
            b->~B(); // <-- we're responsible for dtoring this object.
            std::cout << "end scope" << std::endl;
        } // <-- b gets destroyed here, but it's just a pointer.
        std::cout << "end main" << std::endl;
    }
 
				ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxtZW1vcnkuaD4KCiAgICBzdHJ1Y3QgQiB7CiAgICAgICAgQigpIHsgc3RkOjpjb3V0IDw8ICJCKCkiIDw8IHN0ZDo6ZW5kbDsgfQogICAgICAgIH5CKCkgeyBzdGQ6OmNvdXQgPDwgIn5CKCkiIDw8IHN0ZDo6ZW5kbDsgfQogICAgfTsKCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJzdGFydCBtYWluIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgeyAvLyBzY29wZQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInN0YXJ0IHNjb3BlIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIEIgYjsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJlbmQgc2NvcGUiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9IC8vIGVuZCBzY29wZSwgYiBnZXRzIGF1dG8tZGVzdHJveWVkLgogICAgICAgIHN0ZDo6Y291dCA8PCAiZW5kIG9mIGZpcnN0IGV4YW1wbGUuIiA8PCBzdGQ6OmVuZGwgPDwgc3RkOjplbmRsIDsKCiAgICAgICAgeyAvLyBzY29wZQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInN0YXJ0IHNjb3BlIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIHZvaWQqIHN0YWNrU3RvcmFnZSA9IGFsbG9jYShzaXplb2YoQikpOwogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgImFsbG9jYSdkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIEIqIGIgPSBuZXcgKHN0YWNrU3RvcmFnZSkgQigpOwogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgImN0b3JkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIGItPn5CKCk7IC8vIDwtLSB3ZSdyZSByZXNwb25zaWJsZSBmb3IgZHRvcmluZyB0aGlzIG9iamVjdC4KICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJlbmQgc2NvcGUiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9IC8vIDwtLSBiIGdldHMgZGVzdHJveWVkIGhlcmUsIGJ1dCBpdCdzIGp1c3QgYSBwb2ludGVyLgogICAgICAgIHN0ZDo6Y291dCA8PCAiZW5kIG1haW4iIDw8IHN0ZDo6ZW5kbDsKICAgIH0K