#include <iostream>
#include <typeinfo>
int main()
{
const int i = 42;
auto j = i;
const auto &k = i;
auto *p = &i;
const auto j2 = i, &k2 = i;
// print i means int, and PKi means pointer to const int.
std::cout << "j is " << typeid(j).name()
<< "\nk is " << typeid(k).name()
<< "\np is " << typeid(p).name()
<< "\nj2 is " << typeid(j2).name()
<< "\nk2 is " << typeid(k2).name()
<< std::endl;
++j;
++*p;
++k;
++j2;
++k2;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CgppbnQgbWFpbigpCnsKICBjb25zdCBpbnQgaSA9IDQyOwogIGF1dG8gaiA9IGk7CiAgY29uc3QgYXV0byAmayA9IGk7CiAgYXV0byAqcCA9ICZpOwogIGNvbnN0IGF1dG8gajIgPSBpLCAmazIgPSBpOwoKICAvLyBwcmludCBpIG1lYW5zIGludCwgYW5kIFBLaSBtZWFucyBwb2ludGVyIHRvIGNvbnN0IGludC4KICBzdGQ6OmNvdXQgPDwgImogaXMgIiA8PCB0eXBlaWQoaikubmFtZSgpCiAgICAgICAgICAgIDw8ICJcbmsgaXMgIiA8PCB0eXBlaWQoaykubmFtZSgpCiAgICAgICAgICAgIDw8ICJcbnAgaXMgIiA8PCB0eXBlaWQocCkubmFtZSgpCiAgICAgICAgICAgIDw8ICJcbmoyIGlzICIgPDwgdHlwZWlkKGoyKS5uYW1lKCkKICAgICAgICAgICAgPDwgIlxuazIgaXMgIiA8PCB0eXBlaWQoazIpLm5hbWUoKQogICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgKytqOwogICsrKnA7CiAgKytrOwogICsrajI7CiAgKytrMjsKICByZXR1cm4gMDsKfQ==
prog.cpp: In function ‘int main()’:
prog.cpp:20:6: error: increment of read-only location ‘* p’
++*p;
^
prog.cpp:21:5: error: increment of read-only reference ‘k’
++k;
^
prog.cpp:22:5: error: increment of read-only variable ‘j2’
++j2;
^
prog.cpp:23:5: error: increment of read-only reference ‘k2’
++k2;
^