- 	#include <iostream> 
- 	#include <typeinfo> 
-   
-     struct Type {}; 
-   
-     // 1: Array of Type*. 
-     void func(Type *arr [3]) { 
-         std::cout << "Type* array.\n" 
-                   << typeid(arr).name() << "\n\n"; 
-     } 
-   
-     // 2: Array of Type&. 
-     // Illegal. 
-     // void func(Type &arr [3]) { 
-     //     std::cout << "Type& array.\n" 
-     //               << typeid(arr).name() << "\n\n"; 
-     // } 
-   
-     // 3: Pointer to array of Type. 
-     void func(Type (*arr) [3]) { 
-         std::cout << "Pointer to Type array.\n" 
-                   << typeid(arr).name() << "\n\n"; 
-     } 
-   
-     // 4: Reference to array of Type. 
-     void func(Type (&arr) [3]) { 
-         std::cout << "Reference to Type array.\n" 
-                   << typeid(arr).name() << "\n\n"; 
-     } 
-   
-     int main() { 
-         // Array of Type. 
-         Type   t_arr[3] = {}; 
-   
-         // Array of Type*. 
-         Type* tp_arr[3] = { &t_arr[0], &t_arr[1], &t_arr[2] }; 
-   
-         // Array of Type&. 
-         // Illegal. 
-         // Type& tr_arr[3] = { t_arr[0], t_arr[1], t_arr[2] }; 
-   
-         std::cout << "Type[3]: " << typeid(t_arr).name() << "\n\n"; 
-   
-         func(t_arr);  // Calls #4. 
-         func(&t_arr); // Calls #3. 
-         func(tp_arr); // Calls #1. 
-     } 
-   
				CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDx0eXBlaW5mbz4KCiAgICBzdHJ1Y3QgVHlwZSB7fTsKCiAgICAvLyAxOiBBcnJheSBvZiBUeXBlKi4KICAgIHZvaWQgZnVuYyhUeXBlICphcnIgWzNdKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJUeXBlKiBhcnJheS5cbiIKICAgICAgICAgICAgICAgICAgPDwgdHlwZWlkKGFycikubmFtZSgpIDw8ICJcblxuIjsKICAgIH0KCiAgICAvLyAyOiBBcnJheSBvZiBUeXBlJi4KICAgIC8vIElsbGVnYWwuCiAgICAvLyB2b2lkIGZ1bmMoVHlwZSAmYXJyIFszXSkgewogICAgLy8gICAgIHN0ZDo6Y291dCA8PCAiVHlwZSYgYXJyYXkuXG4iCiAgICAvLyAgICAgICAgICAgICAgIDw8IHR5cGVpZChhcnIpLm5hbWUoKSA8PCAiXG5cbiI7CiAgICAvLyB9CgogICAgLy8gMzogUG9pbnRlciB0byBhcnJheSBvZiBUeXBlLgogICAgdm9pZCBmdW5jKFR5cGUgKCphcnIpIFszXSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiUG9pbnRlciB0byBUeXBlIGFycmF5LlxuIgogICAgICAgICAgICAgICAgICA8PCB0eXBlaWQoYXJyKS5uYW1lKCkgPDwgIlxuXG4iOwogICAgfQoKICAgIC8vIDQ6IFJlZmVyZW5jZSB0byBhcnJheSBvZiBUeXBlLgogICAgdm9pZCBmdW5jKFR5cGUgKCZhcnIpIFszXSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiUmVmZXJlbmNlIHRvIFR5cGUgYXJyYXkuXG4iCiAgICAgICAgICAgICAgICAgIDw8IHR5cGVpZChhcnIpLm5hbWUoKSA8PCAiXG5cbiI7CiAgICB9CiAgICAKICAgIGludCBtYWluKCkgewogICAgICAgIC8vIEFycmF5IG9mIFR5cGUuCiAgICAgICAgVHlwZSAgIHRfYXJyWzNdID0ge307CgogICAgICAgIC8vIEFycmF5IG9mIFR5cGUqLgogICAgICAgIFR5cGUqIHRwX2FyclszXSA9IHsgJnRfYXJyWzBdLCAmdF9hcnJbMV0sICZ0X2FyclsyXSB9OwoKICAgICAgICAvLyBBcnJheSBvZiBUeXBlJi4KICAgICAgICAvLyBJbGxlZ2FsLgogICAgICAgIC8vIFR5cGUmIHRyX2FyclszXSA9IHsgdF9hcnJbMF0sIHRfYXJyWzFdLCB0X2FyclsyXSB9OwoKICAgICAgICBzdGQ6OmNvdXQgPDwgIlR5cGVbM106ICIgPDwgdHlwZWlkKHRfYXJyKS5uYW1lKCkgPDwgIlxuXG4iOwogICAgICAgIAogICAgICAgIGZ1bmModF9hcnIpOyAgLy8gQ2FsbHMgIzQuCiAgICAgICAgZnVuYygmdF9hcnIpOyAvLyBDYWxscyAjMy4KICAgICAgICBmdW5jKHRwX2Fycik7IC8vIENhbGxzICMxLgogICAgfQo=