Are you sure Library should be a struct? Sometimes user wants to check existence of some functions in place of loading, so there would be convenient to use derivation. Same thing is for unloading - user may want to make some cleanup. But it requires 'load' and 'unload' be member functions surely.