#include <iostream>
#include <type_traits>
#include <typeinfo>
template< typename T >
struct S
{
static void foo( ) {
std::cout << typeid(T).name() << std::endl;
std::cout << typeid( typename std::remove_const<T>::type ).name() << std::endl;
}
};
int main( )
{
S<char const*>::foo();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx0eXBlaW5mbz4KCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+CnN0cnVjdCBTCnsKICAgIHN0YXRpYyB2b2lkIGZvbyggKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IHR5cGVpZChUKS5uYW1lKCkgPDwgc3RkOjplbmRsOwogICAgICAgIHN0ZDo6Y291dCA8PCB0eXBlaWQoIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlICkubmFtZSgpIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCgppbnQgbWFpbiggKQp7CiAgICBTPGNoYXIgY29uc3QqPjo6Zm9vKCk7Cn0K