Vector backed by memory pages
I usually focus on the design and this review won't be different. You seem to have created some custom universal allocator, that will place all the (different) objects in continuous space (a page) or create new page if needed. The whole space can be released all at once, but no individual objects. So...

void reset() {
    //delete objects
    for(T* obj : data) {
        obj-&gt;~T(); // &lt;&lt;&lt; will not call the appropriate destructor if not virtual


This can be very problematic, unless T has virtual destructor, you should place some static_assert:

template&lt;class T&gt;
class  PagedVector {
    static_assert(std::has_virtual_destructor&lt;T&gt;::value,
        "Objects without virtual destructor cannot be used");


Similar problem is in create allowing any class, should allow derived only:

template&lt;class U&gt;
U* create() {
    static_assert(std::is_same&lt;U,T&gt;::value || std::is_base_of&lt;T,U&gt;::value,
        "Objects not derived from T are not allowed");




Minor note about = delete:

//non-copiable:
PagedVector(PagedVector&amp;);
PagedVector&amp; operator=(PagedVector&amp;);


The above should be written with const and = delete to avoid using it inside the class:

//non-copiable:
PagedVector(const PagedVector&amp;) = delete;
PagedVector&amp; operator=(const PagedVector&amp;) = delete;