#include <iostream>
using namespace std;

#include <iostream>

class LinkedList{
    // Struct inside the class LinkedList
    // This is one node which is not needed by the caller. It is just
    // for internal work.
    struct Node {
        int x;
        Node *next;
    };

// public member
public:
    // constructor
    /* constexpr */ LinkedList() : head(nullptr) {
    }

    // This prepends a new value at the beginning of the list
    void addValue(int val){
        Node *n = new Node();   // create new Node
        n->x = val;             // set value
        n->next = head;         // make the node point to the next node.
                                //  If the list is empty, this is NULL, so the end of the list --> OK
        head = n;               // last but not least, make the head point at the new node.
    }

    // returns the first element in the list and deletes the Node.
    // caution, no error-checking here!
    int popValue(){
        Node *n = head;
        int ret = n->x;

        head = head->next;
        delete n;
        return ret;
    }

// private member
private:
    Node *head; // this is the private member variable. It is just a pointer to the first Node
};

extern LinkedList list;

int my_crazy_variable = ([]{ list.addValue(10); return 0; })();
LinkedList list;

int main() {
    using namespace std;
	cout << my_crazy_variable << endl;
	cout << list.popValue() << endl; 
    return 0;
}