「stackクラスを修正し、型の異なる2つのオブジェクトをスタックに格納できるように〜」という問題で、解答が↓の様になっていました

template <class X>
class stack {
 X stck[SIZE][2];
 int tos;
public:
 void push(X ob1, X ob2)
 { ...
  stck[tos][0] = ob1;
  stck[tos][1] = ob2;
 }
 X pop(X &ob2);
 { ...
  tos--;
  ob2 = stck[tos][1];
  return stck[tos][0];
 }
};
......


これでは「同じ型のオブジェクトを2つ格納できる汎用stack」では無いかと思うのですが、
実際に型の異なるオブジェクトを同時に扱うstackなどは作れるのでしょうか?