#ifndef STACK_H #define STACK_H class Stack { public: Stack() = default; Stack(Stack const& other); Stack& operator=(Stack const& other); Stack(Stack && other); Stack& operator=(Stack && other); ~Stack(); void push(int v); int top() const; void pop(); bool is_empty() const; private: struct Node { int value; Node* next; }; Node* first; Node* clone(Node* n); }; #endif