#include <iostream>
#include <vector>
using namespace std;
template <typename T>
struct HvVector
{
typedef std::vector<T> rt;
};
class LetYouDo
{
public:
template<typename CLASS, typename TYPE>
LetYouDo(const std::string& name, TYPE (CLASS::*field))
{
std::cout << "3" << std::endl;
}
template<typename CLASS, typename TYPE>
LetYouDo(const std::string& name, typename HvVector<TYPE>::rt (CLASS::*field), TYPE* p)
{
std::cout << "4" << std::endl;
}
};
class Victim
{
public:
int m1;
HvVector<int>::rt m2;
};
int main()
{
Victim v;
v.m1 = 10;
v.m2.push_back(10);
LetYouDo o1("m1", &Victim::m1);
LetYouDo o2("m2", &Victim::m2, static_cast<int*>(0));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgSHZWZWN0b3IKewogICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUPiBydDsKfTsKCmNsYXNzIExldFlvdURvCnsKcHVibGljOgogICAgdGVtcGxhdGU8dHlwZW5hbWUgQ0xBU1MsIHR5cGVuYW1lIFRZUEU+CiAgICBMZXRZb3VEbyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgVFlQRSAoQ0xBU1M6OipmaWVsZCkpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICIzIiA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgQ0xBU1MsIHR5cGVuYW1lIFRZUEU+CiAgICBMZXRZb3VEbyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgdHlwZW5hbWUgSHZWZWN0b3I8VFlQRT46OnJ0IChDTEFTUzo6KmZpZWxkKSwgVFlQRSogcCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIjQiIDw8IHN0ZDo6ZW5kbDsKICAgIH0gICAgICAgIAp9OwoKY2xhc3MgVmljdGltCnsKcHVibGljOgogICAgaW50IG0xOwogICAgSHZWZWN0b3I8aW50Pjo6cnQgbTI7Cn07CgppbnQgbWFpbigpCnsKICAgIFZpY3RpbSB2OwogICAgdi5tMSA9IDEwOwogICAgdi5tMi5wdXNoX2JhY2soMTApOwogICAgTGV0WW91RG8gbzEoIm0xIiwgJlZpY3RpbTo6bTEpOwogICAgTGV0WW91RG8gbzIoIm0yIiwgJlZpY3RpbTo6bTIsIHN0YXRpY19jYXN0PGludCo+KDApKTsKICAgCiAgICByZXR1cm4gMDsKfQ==