I was wondering how to properly check if an std::function is empty. Consider this example:
class Test {
    std::function<void(int a)> eventFunc;
    void registerEvent(std::function<void(int a)> e) {
        eventFunc = e;
    }
    void doSomething() {
        ...
        eventFunc(42);
    }
};
This code compiles just fine in MSVC but if I call doSomething() without initializing the eventFunc the code obviously crashes. That's expected but I was wondering what is the value of the eventFunc? The debugger says 'empty'. So I fixed that using simple if statement:
   void doSomething() {
        ...
        if (eventFunc) {
            eventFunc(42);
        }
   }
This works but I am still wondering what is the value of non-initialized std::function? I would like to write if (eventFunc != nullptr) but std::function is (obviously) not a pointer.
Why the pure if works? What's the magic behind it? And, is it the correct way how to check it?
 
     
     
     
    