Вам необходимо частично специализировать v2
:
template<class T = int, typename = void>
struct v2 {
T x;
};
template<class T>
struct v2<T, std::enable_if_t<std::is_same_v<T, int> || std::is_same_v<T, long>>> {
T x;
v2& operator++(int);
};
В качестве альтернативы, общая функциональность может быть помещена в другой класс, используемый в качестве основы v2
.