#include <iostream>
#include <type_traits>
struct A
{
static const char funnyName[];
};
const char A::funnyName[] = "AaAaA";
struct B : A
{
static const char funnyName[];
};
const char B::funnyName[] = "bBbBb";
template <typename T>
std::string GetFunnyName(T&&)
{
return std::remove_reference<T>::type::funnyName;
}
int main()
{
A* a = new A();
A* b = new B();
std::cout
<< GetFunnyName(*a) << std::endl
<< GetFunnyName(*b) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgpzdHJ1Y3QgQQp7CiAgICBzdGF0aWMgY29uc3QgY2hhciBmdW5ueU5hbWVbXTsKfTsKCmNvbnN0IGNoYXIgQTo6ZnVubnlOYW1lW10gPSAiQWFBYUEiOwoKc3RydWN0IEIgOiBBCnsKICAgIHN0YXRpYyBjb25zdCBjaGFyIGZ1bm55TmFtZVtdOwp9OwoKY29uc3QgY2hhciBCOjpmdW5ueU5hbWVbXSA9ICJiQmJCYiI7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RkOjpzdHJpbmcgR2V0RnVubnlOYW1lKFQmJikKewogICAgcmV0dXJuIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTo6ZnVubnlOYW1lOwp9CgppbnQgbWFpbigpCnsKICAgIEEqIGEgPSBuZXcgQSgpOwogICAgQSogYiA9IG5ldyBCKCk7CiAgICAKICAgIHN0ZDo6Y291dAogICAgICAgIDw8IEdldEZ1bm55TmFtZSgqYSkgPDwgc3RkOjplbmRsCiAgICAgICAgPDwgR2V0RnVubnlOYW1lKCpiKSA8PCBzdGQ6OmVuZGw7Cn0=