Listing 1

#include <cassert>
#include <deque>
#include <list>
#include <stack>
#include <vector>

template <typename S>
void test_stack(S &stack)
{
  stack.push(101);
  stack.push(102);
  stack.push(103);
  assert(3 == stack.size());

  assert(103 == stack.top());
  stack.pop();
  assert(102 == stack.top());
  stack.pop();
  assert(101 == stack.top());
  stack.pop();
  assert(0 == stack.size());
}
int main()
{

  std::stack<int, std::deque<int> >   s_deque;
  std::stack<int, std::vector<int> >  s_vector;
  std::stack<int, std::list<int> >    s_list;

  test_stack(s_deque);
  test_stack(s_vector);
  test_stack(s_list);
}