I'm observing the strange behavior that DCollections will build into a library fine, but when I add the code to my codebase and try to build everything at once, I get this error:
/usr/include/d/std/conv.d(99): Error: template std.conv.toImpl(T,S) if (!implicitlyConverts!(S,T) && isSomeString!(T) && isInputRange!(Unqual!(S)) && isSomeChar!(ElementType!(S))) cannot deduce template function from argument types !(string)(I)
/usr/include/d/std/conv.d(99): Error: template instance errors instantiating template
/usr/include/d/std/conv.d(221): Error: template instance std.conv.to!(string).to!(I) error instantiating
/usr/include/d/std/conv.d(99): instantiated from here: toImpl!(string,Stride!(I[]))
/usr/include/d/std/conv.d(3747): instantiated from here: to!(Stride!(I[]))
/usr/include/d/std/conv.d(3763): instantiated from here: textImpl!(string,Stride!(I[]))
/usr/include/d/std/range.d(5400): instantiated from here: text!(Stride!(I[]))
/usr/include/d/std/algorithm.d(5910): instantiated from here: SortedRange!(I[],comp)
src/dcollections/ArrayList.d(880): instantiated from here: sort!(comp,cast(SwapStrategy)0,I[])
src/dcollections/ArrayList.d(1000): instantiated from here: ArrayList!(I)
This is seen with DMD 2.052 built on Arch Linux x86-64 (multilib - I'm not generating 64 bit code (yet))
I'm working inside the DDT IDE, which is significant because it means DMD is only called once to build the executable - all source files are built in one invocation.