'type' : unexpected type to the right of 'name'
A call is made to a destructor of incorrect type.
Example
class A {}; void f() { A** ppa = new A *; ppa->~A*; // error }
To avoid the error, do this:
typedef A* pA_t; void g() { pA_t *ppa = new pA_t; ppa->~pA_t(); // ok }