I changed the compiler flags to "-W -Wall -pedantic", and was immediately inundated in warnings. I believe that serious, robust server design should try to be as clean and correct as possible at all levels, so I am hoping that you will forgive my pedantry.
I would like to propose a change, mainly to "hook.h" (but also "plugin_api.*") which will entail many changed lines, but just one conceptual modification, so kindly bear with me:
I would like to replace the void* which is used to store function pointers the m_callbacks vector by a genuine void function pointer:
typedef void (voidF*)();
typedef std::pair<void*, voidF> callbackType
Every instance of "void* function" has to be replaced by "voidF function", but the change is straight-forward. It works like a charm in my fork.
Rationale: The C++ standard prohibits using object pointers to store function pointers. With this change the code will be more standard conforming and thus more portable. Also, it is philosophically The Right Thing ;-)
Slightly unrelatedly, "hook.h" is HUGE -- how is your position on switching to C++0x, so we could use variadic templates?