context allocator(type T, type all) { T realloc(all*, size_t); }; forall(type T, type all | allocator(T, all)) struct vector { T *m_data; }; // forall(type T, type all) // void push_back(vector(T, all)* this, T value) // { // (*(this->m_data)) = value; // }