Sto studiando le classi e le funzioni modello.
Ho questo listato, preso pari passo dal libro di Savy "Da C++ a UML".

codice:
#ifndef PILA_H
#define PILA_H

template <class E> class Record
{
	private:
		E elem;
		Record<E>* prec;
}

typedef Record<E>* P;

template <class E>
class Pila
{
	public:
		Pila() {p=0;}
		void top(E& e) const {e=p->elem;}
		bool empty() const {return (p==0);}
		bool full() const {return false;}
		void push(const E e);
		void pop(E& e);
		~Pila();

	private:
		P p;

}
#endif
Ho evidenziato in grassetto la riga che il compilatore non accetta, restituendomi come errore il seguente.

Pila.h:11: error: template declaration of ‘typedef’

E' una notazione obsoleta o un semplice errore?
Ad ogni modo, come risolvo il problema? Cercando in rete trovo documentazione vaga e disordinata circa template e typedef, inoltre sul libro la cosa non viene approfondita a quanto pare.