public static <GInput, GOutput> Pointer<GOutput> convertedPointer(final Converter<? super GInput, ? extends GOutput> converter,
		final Pointer<? extends GInput> pointer) throws NullPointerException {
		if (converter == null) throw new NullPointerException("converter = null");
		if (pointer == null) throw new NullPointerException("pointer = null");
		return new BasePointer<GOutput>() {

			@Override
			public GOutput data() {
				return converter.convert(pointer.data());
			}

			@Override
			public String toString() {
				return Objects.toInvokeString("convertedPointer", converter, pointer);
			}

		};

	}