October 21, 2016
Hey,

the code bellow compiles with dmd 2.071.2, but doesn't compile with the same command with dmd 2.072.0 beta2. Maybe someone knows what's going wrong or whether it is a bug in 2.071.2/2.072.0 (it is a reduced part from memutils):

app.d:
import memutils.utils;

struct HashMap(Key, Value)
{
	int[] m_table; // NOTE: capacity is always POT
	
	~this()
	{
		freeArray!(int)(m_table);
	}
}

----------------------------------------------------------
module memutils.allocators;

final class FreeListAlloc()
{
	import memutils.utils : MallocAllocator;
}

----------------------------------------------------------
module memutils.utils;

import memutils.allocators;

final class MallocAllocator
{
}

final class AutoFreeListAllocator()
{
	FreeListAlloc!()[12] m_freeLists;
}

alias LocklessAllocator = AutoFreeListAllocator!();

R getAllocator(R)() {
	return new R;
}

void freeArray(T)(auto ref T[] array)
{
	auto allocator = getAllocator!(LocklessAllocator); // freeing. Avoid allocating in a dtor
}
--------------------------------------------------------


The command to compile:
dmd -c -Imemutils/ app.d -of/dev/null


Builds with the latest stable. Fails with the beta:

memutils/utils.d(9): Error: class memutils.utils.AutoFreeListAllocator!().AutoFreeListAllocator no size because of forward reference
memutils/utils.d(14): Error: template instance memutils.utils.AutoFreeListAllocator!() error instantiating
memutils/utils.d(11): Error: template instance memutils.allocators.FreeListAlloc!() error instantiating
memutils/utils.d(14):        instantiated from here: AutoFreeListAllocator!()
app.d(9): Error: template instance memutils.utils.freeArray!int error instantiating
app.d(13):        instantiated from here: HashMap!(int, uint)



Compiles with the lates beta if:
dmd -c -Imemutils/ memutils/* app.d -of/dev/null
October 21, 2016
https://github.com/dlang/dmd/pull/5500 maybe this