#include <iostream>
#include <regex>
template <typename T, T& var>
std::string get_variable_name() {
std::string str(__PRETTY_FUNCTION__);
std::smatch match;
std::regex pattern("T& var = (\\w+)");
std::regex_search(str, match, pattern);
return match[1];
}
char char_1;
int int_2;
double double_3;
float float_4;
std::string string_5;
int main()
{
std::cout << get_variable_name<decltype(char_1), char_1>() << std::endl;
std::cout << get_variable_name<decltype(int_2), int_2>() << std::endl;
std::cout << get_variable_name<decltype(double_3), double_3>() << std::endl;
std::cout << get_variable_name<decltype(float_4), float_4>() << std::endl;
std::cout << get_variable_name<decltype(string_5), string_5>() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCYgdmFyPgpzdGQ6OnN0cmluZyBnZXRfdmFyaWFibGVfbmFtZSgpIHsKICBzdGQ6OnN0cmluZyBzdHIoX19QUkVUVFlfRlVOQ1RJT05fXyk7CiAgc3RkOjpzbWF0Y2ggbWF0Y2g7CiAgc3RkOjpyZWdleCBwYXR0ZXJuKCJUJiB2YXIgPSAoXFx3KykiKTsKICBzdGQ6OnJlZ2V4X3NlYXJjaChzdHIsIG1hdGNoLCBwYXR0ZXJuKTsKICByZXR1cm4gbWF0Y2hbMV07Cn0KCmNoYXIgY2hhcl8xOwppbnQgaW50XzI7CmRvdWJsZSBkb3VibGVfMzsKZmxvYXQgZmxvYXRfNDsKc3RkOjpzdHJpbmcgc3RyaW5nXzU7CgppbnQgbWFpbigpCnsKICAgc3RkOjpjb3V0IDw8IGdldF92YXJpYWJsZV9uYW1lPGRlY2x0eXBlKGNoYXJfMSksIGNoYXJfMT4oKSA8PCBzdGQ6OmVuZGw7CiAgIHN0ZDo6Y291dCA8PCBnZXRfdmFyaWFibGVfbmFtZTxkZWNsdHlwZShpbnRfMiksIGludF8yPigpIDw8IHN0ZDo6ZW5kbDsKICAgc3RkOjpjb3V0IDw8IGdldF92YXJpYWJsZV9uYW1lPGRlY2x0eXBlKGRvdWJsZV8zKSwgZG91YmxlXzM+KCkgPDwgc3RkOjplbmRsOwogICBzdGQ6OmNvdXQgPDwgZ2V0X3ZhcmlhYmxlX25hbWU8ZGVjbHR5cGUoZmxvYXRfNCksIGZsb2F0XzQ+KCkgPDwgc3RkOjplbmRsOwogICBzdGQ6OmNvdXQgPDwgZ2V0X3ZhcmlhYmxlX25hbWU8ZGVjbHR5cGUoc3RyaW5nXzUpLCBzdHJpbmdfNT4oKSA8PCBzdGQ6OmVuZGw7Cn0K