This is good advice.
Anything returned by boost::bind or its more limited std equivalents is not a function pointer. It's a (rather complicated) set of templated nested objects.
You will need to use either a free function or a static function in InputManager.
Whoa there. I see what you're saying - a free function taking 2 ints is needed, and to forward from said free function to the InputManager class instance requires that the function has/gets a reference to the instance in some way. For a free function to access a class instance that's not one of it's parameters we need some form of global or static access - we agree so far.
I'm not fluent in GLFW but you can probably make InputManager a singleton (because GLFW only supports exactly one window)
But this is a horrible reason to create a singleton. You don't want a singleton, you want a static or global point of access to a class instance. Most (all?) singleton implementations do that as a side-effect, but comes at the horrible cost of introducing a singleton
OK, so you're assuming that one of the ints passed to the callback is this userdata? Maybe it is, but maybe (probably) not - I didn't download GLFW to check either and the docs don't appear to give any more info on the callback signature.
or there will be some way to store something pointer-like (for storing the this pointer of the relevant instance) as user data.
For my money this is probably a case where an honest-to-goodness global is the right answer.