I have an object of class A that I want to allocate on a custom stack object. To do this, I simply move the stack pointer as many bytes as the object is in size and return its previous value:
class A : public B {}; //B is from a precompiled library
class stack {
public:
    stack(void): _top(&_storage[0]) {}
    template <typename T>
    inline T* push(void) {
        T* ptr = static_cast<T*>(_top);
        _top += sizeof(T);
        return ptr;
    }
    //...
private:
    char _storage[1024];
    char* _top;
};
stack _stack;
int main(int argc, char** argv) {
    A* a = _stack.push<A>(); //ignore the lack of a constructor call
    return 0;
}
Visual C++ simply tells me that static_cast cannot convert from char* to A*. A regular C style cast does not give me this error, but I'd rather be more explicit and avoid a dynamic cast (A inherits from another class, but does not contribute to the vtable it doesn't have). Is there any difference between the two in this case?
 
     
     
     
    