Scusa ... ma questa

void unione( &insiemel<tipoelem>, &insiemel<tipoelem> );

non dovrebbe essere così

void unione( insiemel<tipoelem> &, insiemel<tipoelem> & );

?