    #include <iostream>

    template <typename DT, int DV, void (DT::*DF)(int)>
    struct Description
    {
        typedef DT T;                         // OK
        static const int V = DV;              // OK
        static void (T::*F)(int);
    };

    template <typename DT, int DV, void (DT::*DF)(int)>
    void (DT::* Description<DT, DV, DF>::F)(int) = DF;

    struct TestClass
    {
        void TestFunc( int x ) { std::cout << "Value is: " << x << std::endl; }
    };

    int main()
    {
        typedef Description<TestClass, 5, &TestClass::TestFunc> TCD;

        TestClass t;
        (t.*(TCD::F))(5);
    }