#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;
}