anchor.diff:      if (same_type_as(k1,k2)) then
   
           select type (k1)
  +
  +        class is (key_class)
  +
  +            select type (k2)
  +            class is (key_class)
  +                keys_equal = k1 == k2
  +            end select
  +
           type is (integer)
   
               select type (k2)
  
positive.code:         p%destroy_on_delete = destroy_on_delete
      end if
  
      end subroutine add
  !*****************************************************************************************
  
  !*****************************************************************************************
  
negative.code:     class(*),pointer :: p_value
  
      allocate(p_value, source=value) !make a copy
      call me%add_pointer(key,p_value,destroy_on_delete=.true.)
      nullify(p_value)
  
      end subroutine add_clone
  !*****************************************************************************************
  
  !*****************************************************************************************
      subroutine add_pointer(me,key,value,destroy_on_delete)
  
      !! Add an item to the list, and associate its pointer to the input value.
      !!
      !!@note If an item with the same key is already in the list,
      !!      it is removed and the new one will replace it.
  