casting a function pointer to void* is technically UB... but there is no real work around, and C++11 conditionally supports it... oh joy