I followed the suggestions to improve the new callback system.
Here is what you can do with it now.
Because a boost::function is now accepted as parameter, you can of course do more.
void function1() {}
void function2(const tgui::Callback& callback) {}
struct myClass {
void function3() {};
void function4(const tgui::Callback& callback) {};
} myObj;
auto function5 = []() {};
auto function6 = [](const tgui::Callback& callback) {};
struct myFunctor {
void operator()() {}
} function7;
unsigned int trigger = tgui::Button::LeftMouseClicked;
button->bindCallback(function1, trigger);
button->bindCallbackEx(function2, trigger);
button->bindCallback(&myClass::function3, &myObj, trigger);
button->bindCallbackEx(&myClass::function4, &myObj, trigger);
button->bindCallback(function5, trigger);
button->bindCallbackEx(function6, trigger);
button->bindCallback(function7, trigger);
button->bindCallback(trigger); // just handle the callback the old way