Обмен значениями двух переменных оператором xor с использованием ссылок или указателей

У меня есть две целочисленные переменные i и j, и я хочу создать функцию, которая принимает эти две переменные в качестве аргумента и обменивается их содержимым с помощью оператора xor. Теперь, если я заставлю функцию принимать аргументы по значению, т.е.void swap (int x , int y);(с телом функции таким же, как для функцииswap ниже), то значения хорошо меняются внутри функции. Но поскольку я хочу поменять значения переменных в вызывающей функции, я использовал передачу аргументов по ссылке (и по указателям):

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 ;
}

но ни один случай не показал правильного результата!

Почемуswap функция не обменивается значениями при передаче аргументов по ссылке или по указателям?

Ответы на вопрос(2)

Ваш ответ на вопрос