Размяна на стойности без временна променлива

Функцията по долу разменя стойностите на две променливи без да използва временна променлива. За реализацията на функцията могат да бъдат използвани и други аритметични и логически оператори.

void swap(int &a, int &b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}