Should be using std::declval instead of custom "GetType"