#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;
}
