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?

Reply via email to