- #include <iostream> 
-   
- template <typename T> 
- void my_swap(T &a,T &b) 
- { 
-     T temp = std::move(a); 
-     a = std::move(b); 
-     b = std::move(temp); 
-   
-     /* or: 
-     using std::swap; 
-     swap(a, b); 
-     */ 
- } 
-   
- struct Men 
- { 
-     std::string name; 
-     int age; 
- }; 
-   
- template <> 
- void my_swap<Men>(Men &a, Men &b) 
- { 
-     int temp = a.age; 
-     a.age = b.age; 
-     b.age = temp; 
-   
-     /* or: 
-     std::swap(a.age, b.age); 
-     */ 
- } 
-   
- std::ostream &operator<<(std::ostream &os, const Men &M) 
- { 
-     os << M.name << " is " << M.age; 
-     return os; 
- } 
-   
- int main() 
- { 
-     int x{100}; 
-     int y{200}; 
-     my_swap(x, y); 
-     std::cout << x << "," << y << std::endl; 
-   
-     Men M1{"Jack", 10}; 
-     Men M2{"Tony", 20}; 
-     my_swap(M1, M2); 
-     std::cout << M1 << "," << M2 << std::endl; 
-   
-     return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgbXlfc3dhcChUICZhLFQgJmIpCnsKICAgIFQgdGVtcCA9IHN0ZDo6bW92ZShhKTsKICAgIGEgPSBzdGQ6Om1vdmUoYik7CiAgICBiID0gc3RkOjptb3ZlKHRlbXApOwoKICAgIC8qIG9yOgogICAgdXNpbmcgc3RkOjpzd2FwOwogICAgc3dhcChhLCBiKTsKICAgICovCn0KCnN0cnVjdCBNZW4KewogICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgIGludCBhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Pgp2b2lkIG15X3N3YXA8TWVuPihNZW4gJmEsIE1lbiAmYikKewogICAgaW50IHRlbXAgPSBhLmFnZTsKICAgIGEuYWdlID0gYi5hZ2U7CiAgICBiLmFnZSA9IHRlbXA7CgogICAgLyogb3I6CiAgICBzdGQ6OnN3YXAoYS5hZ2UsIGIuYWdlKTsKICAgICovCn0KCnN0ZDo6b3N0cmVhbSAmb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBNZW4gJk0pCnsKICAgIG9zIDw8IE0ubmFtZSA8PCAiIGlzICIgPDwgTS5hZ2U7CiAgICByZXR1cm4gb3M7Cn0KCmludCBtYWluKCkKewogICAgaW50IHh7MTAwfTsKICAgIGludCB5ezIwMH07CiAgICBteV9zd2FwKHgsIHkpOwogICAgc3RkOjpjb3V0IDw8IHggPDwgIiwiIDw8IHkgPDwgc3RkOjplbmRsOwoKICAgIE1lbiBNMXsiSmFjayIsIDEwfTsKICAgIE1lbiBNMnsiVG9ueSIsIDIwfTsKICAgIG15X3N3YXAoTTEsIE0yKTsKICAgIHN0ZDo6Y291dCA8PCBNMSA8PCAiLCIgPDwgTTIgPDwgc3RkOjplbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQ==