#include <iostream>
void f( void* p, int type )
{
switch( type )
{
case 0: std::cout << *reinterpret_cast<int*>(p); break; // int
case 1: std::cout << *reinterpret_cast<double*>(p); break; // double
//...
}
std::cout << std::endl;
}
int main() {
int i = 42;
double d = 3.1415;
f( &i, 0 ); // ok
f( &d, 1 ); // ok
f( &i, 1 ); // ошибка
f( &d, 0 ); // ошибка
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBmKCB2b2lkKiBwLCBpbnQgdHlwZSApCnsKCXN3aXRjaCggdHlwZSApCgl7CgkJY2FzZSAwOiBzdGQ6OmNvdXQgPDwgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4ocCk7IGJyZWFrOyAvLyBpbnQKCQljYXNlIDE6IHN0ZDo6Y291dCA8PCAqcmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPihwKTsgYnJlYWs7IC8vIGRvdWJsZQoJCS8vLi4uCgl9CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKCQoJaW50IGkgPSA0MjsKCWRvdWJsZSBkID0gMy4xNDE1OwoJCglmKCAmaSwgMCApOyAvLyBvawoJZiggJmQsIDEgKTsgLy8gb2sgCgkKCWYoICZpLCAxICk7IC8vINC+0YjQuNCx0LrQsCAKCWYoICZkLCAwICk7IC8vINC+0YjQuNCx0LrQsAoJCglyZXR1cm4gMDsKfQ==