Intercambiar valores de dos variables por el operador xor usando referencias o punteros

Tengo dos variables enteras i y j, y quiero hacer una función que tome estas dos variables como su argumento e intercambie sus contenidos usando el operador xor. Ahora si hago la función para tomar argumentos por valor es decirvoid swap (int x , int y);(con función de cuerpo igual que para la funciónswap abajo) entonces los valores están siendo intercambiados muy bien dentro de la función. Pero como lo que quiero es el intercambio de los valores de las variables en la función de llamada, utilicé argumentos pasantes por referencia (y también por punteros):

void swap ( int& x , int& y )
{
    x^=y^=x^=y;
    cout << x<< " " << y << endl ;
}

int main ()
{
    int i (1), j (2) ;
    swap ( i, j ) ;
    cout << i << " " << j << endl ;
}

¡Pero ninguno de los casos mostró el resultado correcto!

Porque es elswap ¿La función no intercambia los valores al pasar argumentos por referencia o punteros?

Respuestas a la pregunta(2)

Su respuesta a la pregunta