Listing 6

void TestPtr()
{
  int n;
  ptr<int, !deletable> p_no_delete;
  ptr<int, deletable> p_can_delete;
  p_no_delete = p_can_delete;
  p_can_delete = p_no_delete; // compilation error
  p_no_delete = &n;
  p_can_delete = &n; // compilation error
  p_no_delete = new_cast(new int); // compilation error
  p_can_delete = new_cast(new int);
  p_no_delete.Delete(); // compilation error
  p_can_delete.Delete();
}