www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - dmd 2.072.0 beta 2 no size because of forward reference

reply Eugene Wissner <belka caraus.de> writes:

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):

import memutils.utils;

struct HashMap(Key, Value)
	int[] m_table; // NOTE: capacity is always POT

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: 
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
Oct 21 2016
parent Kagamin <spam here.lot> writes:
https://github.com/dlang/dmd/pull/5500 maybe this
Oct 21 2016