#include <iostream>
#include <type_traits>
struct test
{
void method() const
{
test_const<decltype(this)>();
}
template<typename T>
void test_const() const
{
std::cout << std::is_const<T>::value << " "
<< std::is_const<
typename std::remove_pointer<T>::type>::value << std::endl;
}
};
int main()
{
test t;
t.test_const<int const* const>();
t.test_const<int * const>();
t.test_const<int const* >();
t.test_const<int *>();
t.method();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgogICAgICAgICAgCnN0cnVjdCB0ZXN0CnsKICAgIHZvaWQgbWV0aG9kKCkgY29uc3QKICAgIHsKICAgICAgICB0ZXN0X2NvbnN0PGRlY2x0eXBlKHRoaXMpPigpOwogICAgfQogICAgCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgdm9pZCB0ZXN0X2NvbnN0KCkgY29uc3QKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjppc19jb25zdDxUPjo6dmFsdWUgPDwgIiAiCiAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6aXNfY29uc3Q8CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VD46OnR5cGU+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIHRlc3QgdDsKICAgIHQudGVzdF9jb25zdDxpbnQgY29uc3QqIGNvbnN0PigpOwogICAgdC50ZXN0X2NvbnN0PGludCAqIGNvbnN0PigpOwogICAgdC50ZXN0X2NvbnN0PGludCBjb25zdCogPigpOwogICAgdC50ZXN0X2NvbnN0PGludCAqPigpOwogICAgdC5tZXRob2QoKTsKICAgIAogICAgcmV0dXJuIDA7Cn0=