I am going to quote from C++ primer plus. If someone can please explain in simpler terms that would be great
template <class Type>
bool Stack<Type>::pop(Type & item)
if (top > 0)
Stack<char *> st;
First, the reference variable item has to refer to an Lvalue of some sort, not an array name. Second, the code assumes that you can assign to item. Even if item could refer to an array, you can't assign to an array name. So this approach fails, too.