#include <iostream>
#include <cstdio>
#include <cstdint>
#include <type_traits>
using namespace std;
template<typename T>
uint16_t get_char_and_inc(T* &c) {
if constexpr (std::is_same<T, const char>::value) {
cout << "c = const char* &" << endl;
}
else if constexpr (std::is_same<T, char>::value) {
cout << "c = char* &" << endl;
}
return *c++;
}
int main()
{
const char *cc = "ab";
printf("%p\n", cc);
get_char_and_inc(cc);
printf("%p\n", cc);
char c[] = "ab";
char *p = c;
printf("%p\n", p);
get_char_and_inc(p);
printf("%p\n", p);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGludD4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdWludDE2X3QgZ2V0X2NoYXJfYW5kX2luYyhUKiAmYykgewogIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFQsIGNvbnN0IGNoYXI+Ojp2YWx1ZSkgewogIAljb3V0IDw8ICJjID0gY29uc3QgY2hhciogJiIgPDwgZW5kbDsKICB9CiAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxULCBjaGFyPjo6dmFsdWUpIHsKICAJY291dCA8PCAiYyA9IGNoYXIqICYiIDw8IGVuZGw7CiAgfQogIHJldHVybiAqYysrOwp9CgppbnQgbWFpbigpCnsKICBjb25zdCBjaGFyICpjYyA9ICJhYiI7CiAgcHJpbnRmKCIlcFxuIiwgY2MpOwogIGdldF9jaGFyX2FuZF9pbmMoY2MpOwogIHByaW50ZigiJXBcbiIsIGNjKTsKICAKICBjaGFyIGNbXSA9ICJhYiI7CiAgY2hhciAqcCA9IGM7CiAgcHJpbnRmKCIlcFxuIiwgcCk7CiAgZ2V0X2NoYXJfYW5kX2luYyhwKTsKICBwcmludGYoIiVwXG4iLCBwKTsKfQ==