#include <iostream>
using namespace std;
template <class T>
class Puntero {
T* p_;
public:
Puntero(T* p = nullptr) : p_(p) {}
T* operator->() { return p_; }
~Puntero() { delete p_; }
};
template <class T>
class NodoLista
{
public:
T dato;
Puntero<NodoLista<T>> sig;
NodoLista<T>(const T& e, Puntero<NodoLista<T>> s) : dato(e), sig(s) { };
};
//template <class U>
//typedef Puntero<NodoLista<U>> pNodoLista;
template <class T>
using pNodoLista = Puntero<NodoLista<T>>;
int main()
{
pNodoLista<int> nodo = new NodoLista<int>(1, nullptr);
cout<<nodo->dato<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFB1bnRlcm8gewoJVCogcF87CnB1YmxpYzoKICAgIFB1bnRlcm8oVCogcCA9IG51bGxwdHIpIDogcF8ocCkge30KICAgIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBwXzsgfQogICAgflB1bnRlcm8oKSB7IGRlbGV0ZSBwXzsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIE5vZG9MaXN0YQp7CnB1YmxpYzoKICAgIFQgZGF0bzsKICAgIFB1bnRlcm88Tm9kb0xpc3RhPFQ+PiBzaWc7CiAgICBOb2RvTGlzdGE8VD4oY29uc3QgVCYgZSwgUHVudGVybzxOb2RvTGlzdGE8VD4+IHMpIDogZGF0byhlKSwgc2lnKHMpICB7IH07Cn07Ci8vdGVtcGxhdGUgPGNsYXNzIFU+Ci8vdHlwZWRlZiBQdW50ZXJvPE5vZG9MaXN0YTxVPj4gcE5vZG9MaXN0YTsKdGVtcGxhdGUgPGNsYXNzIFQ+CnVzaW5nIHBOb2RvTGlzdGEgPSBQdW50ZXJvPE5vZG9MaXN0YTxUPj47CmludCBtYWluKCkKewogICAgcE5vZG9MaXN0YTxpbnQ+IG5vZG8gPSBuZXcgTm9kb0xpc3RhPGludD4oMSwgbnVsbHB0cik7CiAgICBjb3V0PDxub2RvLT5kYXRvPDxlbmRsOwp9