In this particular case it seems to me that the simplest solution is to get rid of the Function template argument:

template<typename T> 
class test_c {
public:    
    explicit test_c(T p, std::function<void(T)> func) 
        : m_p(p), m_Func(func) {
    }     
    
    ~test_c(void) {        
        m_Func(m_p);
    }
    
    T get(void) const {        
        return m_p;
    }

private:    
    T m_p;
    const std::function<void(T)> m_Func;
};