@Contract(value = "_, _ -> new", pure = true)
  static <T, U> @NotNull Pointer<T> delegatingPointer(
    @NotNull Pointer<? extends U> underlyingPointer,
    @NotNull Function<? super U, ? extends T> restoration
  ) {
    return new DelegatingPointer.ByValue<>(underlyingPointer, restoration);
  }
@Contract(value = "_, _ -> new", pure = true)
  static <T, U> @NotNull Pointer<T> delegatingPointer(
    @NotNull Pointer<? extends U> underlyingPointer,
    @NotNull Function<? super U, ? extends T> restoration
  )