Как обменять значениями две целочисленные переменные без использования промежуточной переменной

Вот пример функции, которая выполняет данную задачу:

void swap(int& i, int& j)
{
 i ^= j;
 j ^= i;
 i ^= j;
}// i и j обменялись значениями

Данную технику можно применить к различным целочисленным типам, таким как char, short, unsigned long, но никак не к переменным с плавающей точкой.