#include <iostream>
#include <type_traits>

struct Nathan {
    long getHash(){return 0;}
};

template <typename T>
void func(T value)
{
    if (std::is_pointer<T>::value)
        std::cout << value->getHash();
    else
        std::cout << value.getHash();
}
 
int main()
{
    Nathan n;
    func(n);
    func(&n);
}
