"Surely no one will ever need to pass -1 as user data"
Why place undefined behavior traps like that in your code.