История изменений
Исправление rumgot, (текущая версия) :
Еще раз, nullptr нужен для большей типобезопасности:
class A {
public:
  A(int i) : i_(i) {}
private:
  int i_;
};
int main() {
  A a = NULL; // Ok
  A a2 = nullptr; // Ошибка компиляции
  int j = 20;
  if (j == NULL) {} // Ok
  if (j == nullptr) {} // Ошибка компиляции 
}
Вот чтобы таких запретить такие случаи, где стоит Ok  и нужен nullptr.
Исправление rumgot, :
Еще раз, nullptr нужен для большей типобезопасности:
class A {
public:
  A(int i) : i_(i) {}
private:
  int i_;
};
int main() {
  A a = NULL; // Ok
  A a2 = nullptr; // Ошибка компиляции
  int j = 20;
  if (j == NULL) {} // Ok
  if (j == nullptr) {} // Ошибка компиляции 
}
Исправление rumgot, :
Еще раз, nullptr нужен для большей типобезопасности:
class A {
public:
  A(int i) : i_(i) {}
private:
  int i_;
};
int main() {
  // Ok
  A a = NULL;
  // Ошибка компиляции
  //  A a2 = nullptr;
  int j = 20;
  // Ok
  if (j == NULL) {}
  
  // Ошибка компиляции
  if (j == nullptr) {}  
}
Исправление rumgot, :
Еще раз, nullptr нужен для большей типобезопасности:
class A {
public:
  A(int i) : i_(i) {}
private:
  int i_;
};
int main() {
  // Ok
  A a = __null;
  // Ошибка компиляции
  //  A a2 = nullptr;
  int j = 20;
  // Ok
  if (j == NULL) {}
  
  // Ошибка компиляции
  if (j == nullptr) {}  
}
Исправление rumgot, :
Еще раз, nullptr нужен для большей типобезопасности:
class A {
public:
  A(int i) : i_(i) {}
private:
  int i_;
};
int main() {
  // Ok
  A a = __null;
  // Ошибка компиляции
  //  A a2 = nullptr;
  int j = 20;
  // Ok
  if (j == NULL) {}
  
  // Ошибка компиляции
  if (j == nullptr) {}
  
}
Исходная версия rumgot, :
Еще раз, nullptr нужен для большей типобезопасности:
class A {
public:
  A(int i) : i_(i) {}
private:
  int i_;
};
int main() {
  // Ok
  A a = __null;
  // Ошибка компиляции
  //  A a2 = nullptr;
  int j = 20;
  // Ok
  if (j == NULL) {
  // ...
  }
  
  // Ошибка компиляции
  if (j == nullptr) {
  // ...
  }
  
}