#include<complex>
#include<stdlib.h>

template<typename T> inline void swap(T &a,T &b) {
T   tmp=a;a=b;b=tmp;}

template<typename T>  void buble_sort(T *data,int n) {
for(int i=n-1;i>0;--i)
	for(int j=0; j < i;++j) 
		if(data[j]>data[j+1])
			::swap(data[j],data[j+1]);
}


template<typename T = int , size_t N = 100> class Stack {
private:	
 T _rep[N];
 size_t _top;
public:
 Stack():_top(0) {};

 void push(T val) {_rep[_top++]=val;}
 T pop()          {return _rep[--_top];}
 bool is_empty() const   {return (_top==0);} 

  void sort() {
  buble_sort(_rep,N);
  }

};


template class Stack<int>;
//template class Stack<std::complex<double> ,100>;

main() {

Stack<std::complex<double> > sc;
sc.push( std::complex<double>(0.0,1.0));
sc.pop();

//sc.sort();

}
