A 3rd party SDK defines several typedefs, e.g.:
typedef unsigned char SDK_BYTE typedef double SDK_DOUBLE typedef unsigned char SDK_BOOLEAN
I believe this can be done with an unused template argument and an unused-but-unique struct declaration as the argument:
template class variant_cast { /*...*/ }; template<> SDK_BYTE variant_cast::operator()/*...*/ template<> SDK_BOOLEAN variant_cast::operator()/*...*/