akePureMalloc cannot be interpreted at compile time

Adnan relay.public.adnan at outlook.com
Thu Mar 5 20:13:11 UTC 2020


The following program produces an error message and it is not 
clear exactly what line causes this error:

module maybe;

@nogc:
private import std.container : Array;

struct MayBe(T) {
	Array!T data;

	this(T datum) {
		data.reserve(1);
		data.insert(datum);
	}

	T unwrap() const {
		return data[0];
	}

	T unwrapOr(T alternateValue) const {
		return isSome() ? unwrap() : alternateValue;
	}

	bool isSome() const {
		return !data.empty();
	}

	bool isNone() const {
		return !isSome();
	}

	bool contains(T arg) const {
		return isSome() && unwrap() == arg;
	}

	T expect(lazy string msg) const {
		if (isNone()) {
			import core.stdc.stdio : puts;
			import core.stdc.stdlib : exit;

			puts(msg.ptr);
			exit(-1);
		}
		return unwrap();
	}

	void nullify() {
		data.clear();
	}

	void insert(T datum) {
		if (isNone())
			data.insert(datum);
		else
			data.front = datum;
	}
}

MayBe!T flatten(T)(MayBe!(MayBe!T) arg) {
	return isSome() ? arg.unwrap() : some!T();
}

MayBe!T some(T)(T arg) {
	return MayBe!T(arg);
}

MayBe!T none(T)() {
	return MayBe!T();
}

unittest {
	alias MB = MayBe;

	MB!int a;
	assert(a.isNone);

	auto b = none!int();
	assert(b.isNone);

	auto c = some!int(23);
	assert(c.contains(23));

	c.nullify();

	assert(a == c);

	a.insert(11);
	c.insert(11);
	assert(a == c);

	auto d = some!(some!int(9));
	assert(d.flatten() == some!int(9));
}

$ dub test
Generating test runner configuration 'maybe-test-library' for 
'library' (library).
Performing "unittest" build using dmd for x86_64.
maybe ~master: building configuration "maybe-test-library"...
/snap/dmd/99/bin/../import/phobos/std/internal/memory.d(31,33): 
Error: fakePureMalloc cannot be interpreted at compile time, 
because it has no available source code
dmd failed with exit code 1.

And what is the meaning of this error message?



More information about the Digitalmars-d-learn mailing list