#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>>;
template <class T>
struct pNodoLista
{
typedef Puntero<NodoLista<T>> type;
};
int main()
{
//pNodoLista<int> nodo = new NodoLista<int>(1, nullptr);
typename pNodoLista<int>::type nodo = new NodoLista<int>(1, nullptr);
cout<<nodo->dato<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFB1bnRlcm8gewoJVCogcF87CnB1YmxpYzoKICAgIFB1bnRlcm8oVCogcCA9IG51bGxwdHIpIDogcF8ocCkge30KICAgIFQqIG9wZXJhdG9yLT4oKSB7IHJldHVybiBwXzsgfQogICAgflB1bnRlcm8oKSB7IGRlbGV0ZSBwXzsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIE5vZG9MaXN0YQp7CnB1YmxpYzoKICAgIFQgZGF0bzsKICAgIFB1bnRlcm88Tm9kb0xpc3RhPFQ+PiBzaWc7CiAgICBOb2RvTGlzdGE8VD4oY29uc3QgVCYgZSwgUHVudGVybzxOb2RvTGlzdGE8VD4+IHMpIDogZGF0byhlKSwgc2lnKHMpICB7IH07Cn07Ci8vdGVtcGxhdGUgPGNsYXNzIFU+Ci8vdHlwZWRlZiBQdW50ZXJvPE5vZG9MaXN0YTxVPj4gcE5vZG9MaXN0YTsKLy90ZW1wbGF0ZSA8Y2xhc3MgVD4KLy91c2luZyBwTm9kb0xpc3RhID0gUHVudGVybzxOb2RvTGlzdGE8VD4+Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IHBOb2RvTGlzdGEKewogICAgdHlwZWRlZiBQdW50ZXJvPE5vZG9MaXN0YTxUPj4gdHlwZTsKfTsKaW50IG1haW4oKQp7CiAgICAvL3BOb2RvTGlzdGE8aW50PiBub2RvID0gbmV3IE5vZG9MaXN0YTxpbnQ+KDEsIG51bGxwdHIpOwogICAgdHlwZW5hbWUgcE5vZG9MaXN0YTxpbnQ+Ojp0eXBlIG5vZG8gPSBuZXcgTm9kb0xpc3RhPGludD4oMSwgbnVsbHB0cik7CiAgICBjb3V0PDxub2RvLT5kYXRvPDxlbmRsOwp9