dmd 2.072.0 beta 2 no size because of forward reference
Eugene Wissner via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Oct 21 07:58:09 PDT 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
More information about the Digitalmars-d-learn
mailing list