Как определить тип функции для шаблона?
Коль речь идет о шаблонах и желательно избавиться от  int, не лучше ли воспользоваться шаблоном?
template <class T, template <typename> class mc>
class property : public mc<T> {
public:
    property& operator= (T arg)  {
        this->Setter(arg);
        return *this;
    }
    operator T() {
        return this->Getter();
    }
};

template<class T>
class Test {
protected:
    T Getter() {
        std::cout << ("GET\n");
        return n;
    }
    void Setter(T arg) {
        std::cout << ("SET\n");
        n = arg;
    }
    T n;
};

int main() {
    property<int, Test> x;
    x = 10;
    std::cout << "Hello World! << "<< x << "\n";
    
    property<float, Test> y;
    y = 5.3f;
    std::cout << "Hello World! << "<< y << "\n";
}
Можно использовать typedef int value_type; в классе с Setter/Getter.

Тогда в вашем шаблоне вы можете использовать C::value_type. Так в STL, например, сделано.

Плюсы: не надо обязательно заводить n. Можно обзывать его как удобнее или оно может вообще иметь другой тип, если свойство хранится неявно.

Минусы: Надо обязательно заводить этот самый value_type и обновлять его вместе с методами Getter/Setter.