I am using Microsoft VS 2013 on Windows 7 64-bit 

I found the following simple Stack implementation on TutorialsPoint 

<http://www.tutorialspoint.com/cplusplus/cpp_templates.htm> 

Though this was just a simple example, I wanted whatever was "popped" be returned to the caller. As it is now, you have to access top() and then pop() the top for the functionality that I want. 

I tried to change "void pop()" to "T pop()" and then modify the return type of pop() in the implementation, but the compiler balked about not being able to convert string types. 

First, shouldn't a better implementation return the value "popped" 

and, if so, 

How do I modify the code so that I return was it "popped" ? 

If not clear, I would like to use: 

```
        cout << stringStack.pop() << std::endl; 

```

instead of the two lines needed below. 

```
#include <iostream> 
#include <vector> 
#include <cstdlib> 
#include <string> 
#include <stdexcept> 

using namespace std; 

template <class T> 
class Stack 
{ 
private: 
    vector<T> elems;                // elements 

public: 
    void push( T const& );      // push element 
    void pop();         // pop element 
    T top() const;          // return top element 
    bool empty() const      // return true if empty. 
    { 
        return elems.empty(); 
    } 
}; 

template <class T> 
void Stack<T>::push (T const& elem) 
{ 
    // append copy of passed element 
    elems.push_back(elem); 
} 

template <class T> 
void Stack<T>::pop () 
{ 
    if (elems.empty()) 
    { 
        throw out_of_range( "Stack<>::pop(): empty stack" ); 
} 

// remove last element 
elems.pop_back(); 

} 

template <class T> 
T Stack<T>::top () const 
{ 
    if (elems.empty()) 
    { 
        throw out_of_range( "Stack<>::top(): empty stack" ); 
    } 

    // return copy of last element 
    return elems.back(); 

} 

int main() 
{ 
    try 
            { 
        Stack<int>      intStack;   // stack of ints 
        Stack<string>   stringStack;    // stack of strings 

        // manipulate int stack 
        intStack.push( 7 ); 
        cout << intStack.top() <<endl; 

        // manipulate string stack 
        stringStack.push( "hello" ); 
        stringStack.push( "world" ); 
        cout << stringStack.top() << std::endl; 
        stringStack.pop(); 
        cout << stringStack.top() << std::endl; 
        stringStack.pop(); 
        cout << stringStack.top() << std::endl; 

        return 0;

    } 
    catch ( exception const& ex ) 
    { 
        cerr << "Exception: " << ex.what() <<endl; 
        return -1; 

    } 

} 

```