- #include <iostream> 
- #include <vector> 
- #include <string> 
- #include <typeinfo> 
- #include <boost/mpl/list.hpp> 
- #include <boost/mpl/map.hpp> 
- #include <boost/mpl/for_each.hpp> 
- #include <boost/mpl/key_type.hpp>  
-   
- using namespace boost; 
- using namespace std; 
-   
- struct Disp { 
-     template <class Type> 
-     void operator()(const Type&) const 
-     { 
-         cout << typeid(Type).name() << endl; 
-     } 
-     template <typename K, typename V> 
-     void operator()(const mpl::pair<K,V>&) const { 
-         cout << typeid(K).name() << "," << typeid(V).name() << endl; 
-     } 
- } disp; 
-   
-   
- int main() 
- { 
-     typedef mpl::list<int, std::string, char, std::vector<int> > tl; 
-     typedef mpl::map<mpl::pair<int,char>, mpl::pair<int,int>, mpl::pair<char, char> > t2; 
-   
-     cout << "mpl list test" << endl; 
-     mpl::for_each<tl>(disp); 
-     cout << "mpl  map test" << endl; 
-     mpl::for_each<t2>(disp); 
-     cout << "mpl  map key_type test" << endl; 
-     mpl::for_each<t2, mpl::lambda<mpl::key_type<t2, mpl::_1> > >(disp); 
-     cout << "finish" << endl; 
-   
-     return 0; 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxib29zdC9tcGwvbGlzdC5ocHA+CiNpbmNsdWRlIDxib29zdC9tcGwvbWFwLmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9mb3JfZWFjaC5ocHA+CiNpbmNsdWRlIDxib29zdC9tcGwva2V5X3R5cGUuaHBwPiAKCnVzaW5nIG5hbWVzcGFjZSBib29zdDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBEaXNwIHsKICAgIHRlbXBsYXRlIDxjbGFzcyBUeXBlPgogICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IFR5cGUmKSBjb25zdAogICAgewogICAgICAgIGNvdXQgPDwgdHlwZWlkKFR5cGUpLm5hbWUoKSA8PCBlbmRsOwogICAgfQogICAgdGVtcGxhdGUgPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+CiAgICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgbXBsOjpwYWlyPEssVj4mKSBjb25zdCB7CiAgICAgICAgY291dCA8PCB0eXBlaWQoSykubmFtZSgpIDw8ICIsIiA8PCB0eXBlaWQoVikubmFtZSgpIDw8IGVuZGw7CiAgICB9Cn0gZGlzcDsKCgppbnQgbWFpbigpCnsKICAgIHR5cGVkZWYgbXBsOjpsaXN0PGludCwgc3RkOjpzdHJpbmcsIGNoYXIsIHN0ZDo6dmVjdG9yPGludD4gPiB0bDsKICAgIHR5cGVkZWYgbXBsOjptYXA8bXBsOjpwYWlyPGludCxjaGFyPiwgbXBsOjpwYWlyPGludCxpbnQ+LCBtcGw6OnBhaXI8Y2hhciwgY2hhcj4gPiB0MjsKCiAgICBjb3V0IDw8ICJtcGwgbGlzdCB0ZXN0IiA8PCBlbmRsOwogICAgbXBsOjpmb3JfZWFjaDx0bD4oZGlzcCk7CiAgICBjb3V0IDw8ICJtcGwgIG1hcCB0ZXN0IiA8PCBlbmRsOwogICAgbXBsOjpmb3JfZWFjaDx0Mj4oZGlzcCk7CiAgICBjb3V0IDw8ICJtcGwgIG1hcCBrZXlfdHlwZSB0ZXN0IiA8PCBlbmRsOwogICAgbXBsOjpmb3JfZWFjaDx0MiwgbXBsOjpsYW1iZGE8bXBsOjprZXlfdHlwZTx0MiwgbXBsOjpfMT4gPiA+KGRpc3ApOwogICAgY291dCA8PCAiZmluaXNoIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==