Hi,

After upgrading to DMD 2.064.2 and vibed 0.7.16 (also tried master), I am unable to build my app. I build vibe in a seperate step, generating a .o file, which I link to the rest of the application. Only unittest build fails!

If I pass -unittest to both generation of vibe and my app before linking, I get the following compile errors:

/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith does not match any function template declaration. Candidates are:
/usr/include/dmd/phobos/std/algorithm.d(5004):        std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint))
/usr/include/dmd/phobos/std/algorithm.d(5077):        std.algorithm.startsWith(alias pred = "a == b", R1, R2)(R1 doesThisStart, R2 withThis) if (isInputRange!R1 && isInputRange!R2 && is(typeof(binaryFun!pred(doesThisStart.front, withThis.front)) : bool))
/usr/include/dmd/phobos/std/algorithm.d(5146):        std.algorithm.startsWith(alias pred = "a == b", R, E)(R doesThisStart, E withThis) if (isInputRange!R && is(typeof(binaryFun!pred(doesThisStart.front, withThis)) : bool))
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint)) cannot deduce template function from argument types !()(string, string)
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith does not match any function template declaration. Candidates are:
/usr/include/dmd/phobos/std/algorithm.d(5004):        std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint))
/usr/include/dmd/phobos/std/algorithm.d(5077):        std.algorithm.startsWith(alias pred = "a == b", R1, R2)(R1 doesThisStart, R2 withThis) if (isInputRange!R1 && isInputRange!R2 && is(typeof(binaryFun!pred(doesThisStart.front, withThis.front)) : bool))
/usr/include/dmd/phobos/std/algorithm.d(5146):        std.algorithm.startsWith(alias pred = "a == b", R, E)(R doesThisStart, E withThis) if (isInputRange!R && is(typeof(binaryFun!pred(doesThisStart.front, withThis)) : bool))
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint)) cannot deduce template function from argument types !()(string, string)
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith does not match any function template declaration. Candidates are:
/usr/include/dmd/phobos/std/algorithm.d(5004):        std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint))
/usr/include/dmd/phobos/std/algorithm.d(5077):        std.algorithm.startsWith(alias pred = "a == b", R1, R2)(R1 doesThisStart, R2 withThis) if (isInputRange!R1 && isInputRange!R2 && is(typeof(binaryFun!pred(doesThisStart.front, withThis.front)) : bool))
/usr/include/dmd/phobos/std/algorithm.d(5146):        std.algorithm.startsWith(alias pred = "a == b", R, E)(R doesThisStart, E withThis) if (isInputRange!R && is(typeof(binaryFun!pred(doesThisStart.front, withThis)) : bool))
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint)) cannot deduce template function from argument types !()(string, string)
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith does not match any function template declaration. Candidates are:
/usr/include/dmd/phobos/std/algorithm.d(5004):        std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint))
/usr/include/dmd/phobos/std/algorithm.d(5077):        std.algorithm.startsWith(alias pred = "a == b", R1, R2)(R1 doesThisStart, R2 withThis) if (isInputRange!R1 && isInputRange!R2 && is(typeof(binaryFun!pred(doesThisStart.front, withThis.front)) : bool))
/usr/include/dmd/phobos/std/algorithm.d(5146):        std.algorithm.startsWith(alias pred = "a == b", R, E)(R doesThisStart, E withThis) if (isInputRange!R && is(typeof(binaryFun!pred(doesThisStart.front, withThis)) : bool))
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint)) cannot deduce template function from argument types !()(string, string)
/usr/include/dmd/phobos/std/traits.d(251): Error: argument vibe has no parent
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith does not match any function template declaration. Candidates are:
/usr/include/dmd/phobos/std/algorithm.d(5004):        std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint))
/usr/include/dmd/phobos/std/algorithm.d(5077):        std.algorithm.startsWith(alias pred = "a == b", R1, R2)(R1 doesThisStart, R2 withThis) if (isInputRange!R1 && isInputRange!R2 && is(typeof(binaryFun!pred(doesThisStart.front, withThis.front)) : bool))
/usr/include/dmd/phobos/std/algorithm.d(5146):        std.algorithm.startsWith(alias pred = "a == b", R, E)(R doesThisStart, E withThis) if (isInputRange!R && is(typeof(binaryFun!pred(doesThisStart.front, withThis)) : bool))
/usr/include/dmd/phobos/std/traits.d(241): Error: template std.algorithm.startsWith(alias pred = "a == b", Range, Needles...)(Range doesThisStart, Needles withOneOfThese) if (isInputRange!Range && Needles.length > 1 && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[0])) : bool) && is(typeof(.startsWith!pred(doesThisStart, withOneOfThese[1..__dollar])) : uint)) cannot deduce template function from argument types !()(string, string)
/usr/include/dmd/phobos/std/traits.d(251): Error: argument false has no parent
/usr/include/dmd/phobos/std/traits.d(251): Error: alias std.traits.moduleName!false.moduleName recursive alias declaration
/usr/include/dmd/phobos/std/traits.d(251): Error: template instance std.traits.moduleName!false error instantiating
/usr/include/dmd/phobos/std/traits.d(251):        instantiated from here: moduleName!(vibe)
/usr/include/dmd/phobos/std/traits.d(251):        instantiated from here: moduleName!(core)
/usr/include/dmd/phobos/std/traits.d(251):        instantiated from here: moduleName!(concurrency)
source/vibe/concurrency.d(890):        ... (4 instantiations, -v to show) ...
source/vibe/core/concurrency.d(286):        instantiated from here: IsolatedRef!(A)
source/vibe/concurrency.d(1002):        instantiated from here: Isolated!(A)
/usr/include/dmd/phobos/std/traits.d(251): Error: template instance std.traits.moduleName!(vibe) error instantiating
/usr/include/dmd/phobos/std/traits.d(251):        instantiated from here: moduleName!(core)
/usr/include/dmd/phobos/std/traits.d(251):        instantiated from here: moduleName!(concurrency)
source/vibe/concurrency.d(890):        instantiated from here: moduleName!(A)
source/vibe/concurrency.d(871):        ... (3 instantiations, -v to show) ...
source/vibe/core/concurrency.d(286):        instantiated from here: IsolatedRef!(A)
source/vibe/concurrency.d(1002):        instantiated from here: Isolated!(A)
/usr/include/dmd/phobos/std/traits.d(251): Error: template instance std.traits.moduleName!(core) error instantiating
/usr/include/dmd/phobos/std/traits.d(251):        instantiated from here: moduleName!(concurrency)
source/vibe/concurrency.d(890):        instantiated from here: moduleName!(A)
source/vibe/concurrency.d(871):        instantiated from here: generateModuleImportsImpl!(A, )
source/vibe/concurrency.d(670):        ... (2 instantiations, -v to show) ...
source/vibe/core/concurrency.d(286):        instantiated from here: IsolatedRef!(A)
source/vibe/concurrency.d(1002):        instantiated from here: Isolated!(A)
/usr/include/dmd/phobos/std/traits.d(251): Error: template instance std.traits.moduleName!(concurrency) error instantiating
source/vibe/concurrency.d(890):        instantiated from here: moduleName!(A)
source/vibe/concurrency.d(871):        instantiated from here: generateModuleImportsImpl!(A, )
source/vibe/concurrency.d(670):        instantiated from here: generateModuleImports!(A)
isolatedAggregateMethodsString(1):        ... (1 instantiations, -v to show) ...
source/vibe/core/concurrency.d(286):        instantiated from here: IsolatedRef!(A)
source/vibe/concurrency.d(1002):        instantiated from here: Isolated!(A)
source/vibe/concurrency.d(890): Error: template instance std.traits.moduleName!(A) error instantiating
source/vibe/concurrency.d(871):        instantiated from here: generateModuleImportsImpl!(A, )
source/vibe/concurrency.d(670):        instantiated from here: generateModuleImports!(A)
isolatedAggregateMethodsString(1):        instantiated from here: isolatedAggregateMethodsString!(A)
source/vibe/core/concurrency.d(286):        instantiated from here: IsolatedRef!(A)
source/vibe/concurrency.d(1002):        instantiated from here: Isolated!(A)
/usr/include/dmd/phobos/std/traits.d(3575): Error: template instance std.traits.MemberFunctionsTuple!(A, "toString").shrinkOne!(__T16CollectOverloadsTC4vibe4core11concurrency1AZ) is used as a type
/usr/include/dmd/phobos/std/traits.d(3575): Error: template instance std.traits.MemberFunctionsTuple!(A, "toString").shrinkOne!(__T16CollectOverloadsTC4vibe4core11concurrency1AZ) is used as a type
/usr/include/dmd/phobos/std/traits.d(3575): Error: can only slice tuple types, not _error_
make[1]: *** [build/test/vibe.o] Error 1

If I however don't pass -unittest to build of vibe, which is how I did it previously, I get the following linker errors

dmd build/test/src.o build/test/src.ai.work.o build/test/src.boss.o build/test/src.boss.core.o build/test/src.boss.proc.o build/test/src.boss.proc.io.o build/test/src.boss.proc.worker.o build/test/src.boss.util.o build/test/lib.xunit.dunit.o build/test/lib.std.o build/test/vibe.o -Isrc -Ilib/xunit -Ilib -I~/.dub/packages/vibe-d-master/source -I~/.dub/packages/openssl-master -I~/.dub/packages/libev-master -I~/.dub/packages/libevent-master -I/usr/include/dmd/phobos -I/usr/include/dmd/druntime/import -L-ldl -Jbuild/autogen -wi -allinst -version=VibeLibeventDriver -version=LIBEV4 -version=Have_vibe_d -version=Have_libevent -version=Have_libev -version=Have_openssl -version=VibeCustomMain -L-levent -L-levent_pthreads -L-lev -L-lssl -L-lcrypto -g -debug -unittest -ofdboss-test
build/test/src.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
build/test/src.ai.work.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.ai.work.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
build/test/src.boss.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.boss.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
build/test/src.boss.core.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.boss.core.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
build/test/src.boss.proc.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.boss.proc.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
build/test/src.boss.proc.io.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.boss.proc.io.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
build/test/src.boss.proc.worker.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.boss.proc.worker.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
build/test/src.boss.util.o:(.data._D36TypeInfo_OC4vibe4core11concurrency1A6__initZ+0x10): undefined reference to `_D4vibe4core11concurrency1A7__ClassZ'
build/test/src.boss.util.o: In function `pure nothrow @safe vibe.core.concurrency.IsolatedRef!(vibe.core.concurrency.CLS).IsolatedRef vibe.core.concurrency.makeIsolated!(vibe.core.concurrency.CLS).makeIsolated()':
/home/oivind/work/quad/dboss/source/vibe/core/concurrency.d:205: undefined reference to `_D4vibe4core11concurrency3CLS7__ClassZ'
collect2: error: ld returned 1 exit status