#include <cstdint>
#include <iostream>
#include <type_traits>
void Get(std::nullptr_t) { std::cout << "nullptr" << std::endl; }
void Get(int* out) { std::cout << "int* :" << *out << std::endl; }
void Get(std::int64_t* out) { std::cout << "int64* :" << *out << std::endl; }
void Get(double* out) { std::cout << "double* :" << *out << std::endl; }
void Get(char** ) { std::cout << "char** :" << std::endl; }
void Get(void** ) { std::cout << "void** :" << std::endl; }
void Get() {}
template <typename T, typename... Args>
typename std::enable_if<std::is_same<std::nullptr_t, T>::value || std::is_pointer<T>::value>::type
Get(T out, Args... other)
{
Get(out);
Get(other...);
}
int main()
{
int i = 42;
double d = 4.2;
Get(&i, nullptr, &d);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbnQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdm9pZCBHZXQoc3RkOjpudWxscHRyX3QpIHsgc3RkOjpjb3V0IDw8ICJudWxscHRyIiA8PCBzdGQ6OmVuZGw7IH0Kdm9pZCBHZXQoaW50KiBvdXQpICB7IHN0ZDo6Y291dCA8PCAiaW50KiA6IiAgPDwgKm91dCA8PCBzdGQ6OmVuZGw7IH0Kdm9pZCBHZXQoc3RkOjppbnQ2NF90KiBvdXQpICB7IHN0ZDo6Y291dCA8PCAiaW50NjQqIDoiICA8PCAqb3V0IDw8IHN0ZDo6ZW5kbDsgfQp2b2lkIEdldChkb3VibGUqIG91dCkgeyBzdGQ6OmNvdXQgPDwgImRvdWJsZSogOiIgPDwgKm91dCA8PCBzdGQ6OmVuZGw7IH0Kdm9pZCBHZXQoY2hhcioqICkgeyBzdGQ6OmNvdXQgPDwgImNoYXIqKiA6IiA8PCBzdGQ6OmVuZGw7IH0Kdm9pZCBHZXQodm9pZCoqICkgeyBzdGQ6OmNvdXQgPDwgInZvaWQqKiA6IiA8PCBzdGQ6OmVuZGw7IH0KCnZvaWQgR2V0KCkge30KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgp0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8c3RkOjpudWxscHRyX3QsIFQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlPjo6dHlwZQpHZXQoVCBvdXQsIEFyZ3MuLi4gb3RoZXIpCnsKICAgIEdldChvdXQpOwogICAgR2V0KG90aGVyLi4uKTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgaSA9IDQyOwogICAgZG91YmxlIGQgPSA0LjI7CiAgICBHZXQoJmksIG51bGxwdHIsICZkKTsKICAgIHJldHVybiAwOwp9Cg==