#include <iostream>
using namespace std;
void foo(const bool is_int, const void* param) {
if(is_int) {
const int* const* ptr = param;
cout << "int**: " << *ptr << endl;
} else {
const double* ptr = param;
cout << "double*: " << *ptr << endl;
}
}
int main() {
const auto int_num = 1020;
const auto int_ptr = &int_num;
const auto double_num = 1020.7;
const auto double_ptr = &double_num;
foo(true, &int_ptr);
//foo(true, reinterpret_cast<const void*>(&int_ptr));
foo(false, double_ptr);
//foo(false, reinterpret_cast<const void*>(double_ptr));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZm9vKGNvbnN0IGJvb2wgaXNfaW50LCBjb25zdCB2b2lkKiBwYXJhbSkgewogICAgaWYoaXNfaW50KSB7CiAgICAJY29uc3QgaW50KiBjb25zdCogcHRyID0gcGFyYW07CiAgICAJCiAgICAgICAgY291dCA8PCAiaW50Kio6ICIgPDwgKnB0ciA8PCBlbmRsOwogICAgfSBlbHNlIHsKICAgIAljb25zdCBkb3VibGUqIHB0ciA9IHBhcmFtOwogICAgCQogICAgICAgIGNvdXQgPDwgImRvdWJsZSo6ICIgPDwgKnB0ciA8PCBlbmRsOwogICAgfQkKfQoKaW50IG1haW4oKSB7Cgljb25zdCBhdXRvIGludF9udW0gPSAxMDIwOwoJY29uc3QgYXV0byBpbnRfcHRyID0gJmludF9udW07Cgljb25zdCBhdXRvIGRvdWJsZV9udW0gPSAxMDIwLjc7Cgljb25zdCBhdXRvIGRvdWJsZV9wdHIgPSAmZG91YmxlX251bTsKCQoJZm9vKHRydWUsICZpbnRfcHRyKTsKCS8vZm9vKHRydWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KCZpbnRfcHRyKSk7Cglmb28oZmFsc2UsIGRvdWJsZV9wdHIpOwoJLy9mb28oZmFsc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGRvdWJsZV9wdHIpKTsKfQ==
prog.cpp: In function ‘void foo(bool, const void*)’:
prog.cpp:7:30: error: invalid conversion from ‘const void*’ to ‘const int* const*’ [-fpermissive]
const int* const* ptr = param;
^~~~~
prog.cpp:11:26: error: invalid conversion from ‘const void*’ to ‘const double*’ [-fpermissive]
const double* ptr = param;
^~~~~