https://www.machinet.net/tutorial-eng/implementing-custom-stacks-using-cpp-guide