| void varSwap(int& a, int& b); void varSwap(double& a, double& b); ... | 
 invalid approach
      invalid approach
| template<class T> void varSwap(T& a, T& b) { T tmp(b); b = a; a = tmp; } | 
Behaviour with predefined types: 
  
 
	int ia = 1;  
int ib = 2; 
varSwap(ia, ib); 
cout « ia « ", " « ib « endl; // output: 2, 1
  
  
	double da = 1.1;  
double db = 2.2; 
varSwap(da, db); 
cout « da « ", " « db « endl; // output: 2.2, 1.1
  
Behaviour with user-defined types: 
  
 
	class MyClass {  
public: 
MyClass(std::string t) : myString(t) { } 
	 
 MyClass() { }
MyClass() { } 
std::string getString(void) { return myString; } 
void setString(std::string& t) { myString = t; } 
private: 
std::string myString; 
      };
  
  
	MyClass ma("A");  
MyClass mb("B"); 
varSwap(ma, mb); 
cout « ma « ", " « mb « endl; // output: B, A
  
Leo Liberti 2008-01-12