digitalmars.D.learn - dmd 2.072.0 beta 2 no size because of forward reference
- Eugene Wissner (59/59) Oct 21 2016 Hey,
- Kagamin (1/1) Oct 21 2016 https://github.com/dlang/dmd/pull/5500 maybe this
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
Oct 21 2016