#include <iostream>

class Ptr
{
public:
    typedef void (*ptr_type) ();

    Ptr(const Ptr& value);
    Ptr(ptr_type value);
   
    ptr_type GetPtr() const;
    Ptr& operator=(const Ptr& value);
    Ptr& operator=(ptr_type value);

private:
   ptr_type value_;
};

Ptr::Ptr(const Ptr& value) :
    value_(value.value_)
{
}

Ptr::Ptr(ptr_type value) :
    value_(value)
{
}

Ptr::ptr_type Ptr::GetPtr() const
{
    return value_;
}

Ptr& Ptr::operator=(const Ptr& value)
{
    value_ = value.value_;
    return *this;
}

Ptr& Ptr::operator=(ptr_type value)
{
    value = value_;
    return *this;
}

class TestClass
{
public:
    TestClass();

    static void TestFunction();
};

TestClass::TestClass()
{
    Ptr myPtr = TestFunction;    //Diese Zeile geht NICHT!
    Ptr myPtr2(TestFunction);    //Diese Zeile geht!
    myPtr.GetPtr()();
}

void TestClass::TestFunction()
{
    std::wcout << L"Geht doch!" << std::endl;
}

int main()
{
    TestClass myTestClass;
    std::wcout << L"Press any Key to exit!" << std::endl;
    std::cin.get();
    return 0;
}