será que vai dar certo? Sim.
Você deveria usá-lo? Não.
Esse tipo de micro-otimização faria sentido se:
você examinou o código que o compilador gera para a maneira direta de fazer isso (atribuição e temporária) e decidiu que a abordagem XOR gera código mais rápido
você definiu o perfil do seu aplicativo e descobriu que o custo da abordagem direta supera a clareza do código (e a economia resultante em manutenção)
Para o primeiro ponto, a menos que você tenha feito essa medição, deve confiar no compilador. Quando a semântica do que você está tentando fazer é clara, existem muitos truques que o compilador pode fazer, incluindo reorganizar o acesso variável para que a troca não seja necessária, ou alinhar as instruções no nível da máquina que forneçam o mais rápido trocar por um determinado tipo de dados. "Truques", como a troca XOR, tornam mais difícil para o compilador ver o que você está tentando fazer e, portanto, tornam menos capaz de aplicar essas otimizações.
Para o segundo ponto, o que você está ganhando pela complexidade adicional? Mesmo se você mediu e encontrou a abordagem XOR mais rapidamente, isso tem impacto suficiente para justificar uma abordagem menos clara? Como você sabe?
Finalmente, você deve verificar se existe uma função de troca padrão para sua plataforma / linguagem - o C ++ STL, por exemplo, fornece uma função de troca de modelo que tenderá a ser altamente otimizada para seu compilador / plataforma.