#include<iostream>
#include<cstdlib>
using namespace std;
struct Student{
int id;
float gpa;
};
template<class T>
class Store{
private:
T item;
int haveValue;
public:
Store(void);
T getElem(void);
void putElem(T x);
};
template <class T>
Store <T>::Store(void) :haveValue(0){}
template <class T>
T Store<T>::getElem(void)
{
if (haveValue == 0){
cout << "no item present!" << endl;
exit(1);
}
return item;
}
template<class T>
void Store<T>::putElem(T x)
{
haveValue++;
item = x;
}
void main()
{
Student g = { 1000, 23.0};
Store<int>S1, S2;
Store<Student>S3;
Store<double>D;
S1.putElem(3);
S2.putElem(-7);
cout << S1.getElem() << "," << S2.getElem() << endl;
S3.putElem(g);
cout << "the student id is:" << S3.getElem().id << endl;
cout << "object D:";
cout << D.getElem() << endl;
}