Вопрос по шаблонным функциям возник. Почему функция принимает в качестве параметров указатели на int, а писать надо <int> а не <int*>?
Твой код не будет иметь эффекта снаружи этой твоей фунции Swap.
Если переделаешь чтобы имела, его нельзя будте так вызывать, для этого нужны lvalues.