Dereferenciando o ponteiro vazio em C ++

Estou tentando implementar uma lista vinculada genérica. A estrutura para o nó é a seguinte -

typedef struct node{
        void *data;
        node *next;      
};

Agora, quando tento atribuir um endereço aos dados, suponha, por exemplo, um int, como -

int n1=6;
node *temp;
temp = (node*)malloc(sizeof(node));
temp->data=&n1;

Como posso obter o valor de n1 do nó? Se eu disser -

cout<<(*(temp->data));

Eu recebo -

`void*' is not a pointer-to-object type 

Não anular ponteiro get typecasted para o tipo de ponteiro int quando eu atribuir um endereço de int para ele?