Haven't compiled it. But should work. class Stack (T) { public: this() { top = -1; } void push(T i) { st[++top] = i; } T pop() { return st[top--]; } private: int top; T[100] st; }; int main ( char[][] args) { auto ii = new Stack!(int); auto ss = Stack!(char[]); ii.push(25); ss.push("Hello"); return 0; }