#include #include #include #include int choose(int) { return 1; } int choose(int*) { return 2; } bool is_empty(int* p) { return p == nullptr; } template bool relay(T value) { return is_empty(value); } int main() { static_assert(std::is_same::value, "null type"); assert(choose(0) == 1); assert(choose(nullptr) == 2); assert(relay(nullptr)); int n = 7; int* p = nullptr; assert(!p); p = &n; assert(*p == 7); std::cout << choose(nullptr) << ' ' << *p << '\n'; }