// Build don't run: #include void g(int) {} void g(long) {} extern void g(void*); template void h() {} void k(int) {} template void l(T); template <> void l(int) {} template <> void l(long) {} int main() { int i = NULL; // WARNING - converting NULL to non-pointer type float z = NULL; // WARNING - converting NULL to non-pointer type int a[2]; i != NULL; // WARNING - NULL used in arithmetic NULL != z; // WARNING - NULL used in arithmetic k != NULL; // No warning: decay conversion NULL != a; // Likewise. -NULL; // WARNING - converting NULL to non-pointer type +NULL; // WARNING - converting NULL to non-pointer type ~NULL; // WARNING - converting NULL to non-pointer type a[NULL] = 3; // WARNING - converting NULL to non-pointer-type i = NULL; // WARNING - converting NULL to non-pointer type z = NULL; // WARNING - converting NULL to non-pointer type k(NULL); // WARNING - converting NULL to int g(NULL); // WARNING - converting NULL to int h(); // WARNING - NULL bound to integer template parameter l(NULL); // WARNING - converting NULL to int NULL && NULL; // No warning: converting NULL to bool is OK }