#include <iostream>
#include <functional>
 
struct myStruct {
    int data;	
};
 
void get_data(struct myStruct* const value, const void * const data) {
    std::cout << "called!" << std::endl;
    value->data = 12345;
}
 
template<typename MyType>
void process(bool test, const std::function<void(MyType* const, const void* const)>& callb) {
    MyType t;
    callb(&t, nullptr);
    std::cout << t.data << std::endl;
}
 
int main() {
    bool test1 = true;
    process<myStruct>(test1, get_data);
    return 0;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnN0cnVjdCBteVN0cnVjdCB7CiAgICBpbnQgZGF0YTsJCn07Cgp2b2lkIGdldF9kYXRhKHN0cnVjdCBteVN0cnVjdCogY29uc3QgdmFsdWUsIGNvbnN0IHZvaWQgKiBjb25zdCBkYXRhKSB7CiAgICBzdGQ6OmNvdXQgPDwgImNhbGxlZCEiIDw8IHN0ZDo6ZW5kbDsKICAgIHZhbHVlLT5kYXRhID0gMTIzNDU7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIE15VHlwZT4Kdm9pZCBwcm9jZXNzKGJvb2wgdGVzdCwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKE15VHlwZSogY29uc3QsIGNvbnN0IHZvaWQqIGNvbnN0KT4mIGNhbGxiKSB7CiAgICBNeVR5cGUgdDsKICAgIGNhbGxiKCZ0LCBudWxscHRyKTsKICAgIHN0ZDo6Y291dCA8PCB0LmRhdGEgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIGJvb2wgdGVzdDEgPSB0cnVlOwogICAgcHJvY2VzczxteVN0cnVjdD4odGVzdDEsIGdldF9kYXRhKTsKICAgIHJldHVybiAwOwp9