#ifndef STACK_H_ #define STACK_H_ #include using Stack_Data = std::string; class Stack { public: Stack(); ~Stack(); Stack(Stack const&) = delete; Stack(Stack&&) = delete; Stack& operator=(Stack const&) = delete; Stack& operator=(Stack&&) = delete; bool empty() const; void push(Stack_Data const&); Stack_Data pop(); private: class Element { public: Element(Stack_Data const& i, Element* n = nullptr) : data(i), next(n) {} ~Element() { delete next; } Element(Element const&) = delete; Element(Element&&) = delete; Element& operator=(Element const&) = delete; Element& operator=(Element&&) = delete; Stack_Data data; Element* next; }; Element* first; }; #endif