Intercambiando valores de duas variáveis ​​pelo operador xor usando referências ou ponteiros

Eu tenho duas variáveis ​​inteiras i e j e eu quero fazer uma função que leva essas duas variáveis ​​como seu argumento e troca seu conteúdo usando o operador xor. Agora, se eu fizer a função para receber argumentos por valor, ou seja,void swap (int x , int y);(com corpo de função igual ao da funçãoswap abaixo), em seguida, os valores estão sendo trocados bem dentro da função. Mas como o que eu quero é a troca dos valores das variáveis ​​na função call eu usei passando argumentos por referência (e por ponteiros também):

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

mas nenhum dos casos mostrou o resultado correto!

Porque é oswap função não trocando os valores na passagem de argumentos por referência ou ponteiros?

questionAnswers(2)

yourAnswerToTheQuestion