/* TEST_OUTPUT:
---
fail_compilation/test17451.d(22): Error: undefined identifier `allocator`
fail_compilation/test17451.d(23): Error: `false` has no effect
fail_compilation/test17451.d(30): Error: variable `test17451.HashMap!(ThreadSlot).HashMap.__lambda_L30_C20.v` - size of type `ThreadSlot` is invalid
fail_compilation/test17451.d(44): Error: template instance `test17451.HashMap!(ThreadSlot)` error instantiating
---
*/

// https://issues.dlang.org/show_bug.cgi?id=17451

interface ManualEvent {}

interface EventDriver {
        ManualEvent createManualEvent() ;
}

struct ArraySet(Key)
{
        ~this()
    {
                try allocator;
                catch (Exception e) false; // should never happen
        }
}

struct HashMap(TValue)
{
        alias Value = TValue;
        static if ({ Value v; }) {}
}

struct Task {}

class Libevent2Driver : EventDriver {
        Libevent2ManualEvent createManualEvent() {}
}

struct ThreadSlot {
        ArraySet!Task tasks;
}

class Libevent2ManualEvent : ManualEvent {
        HashMap!ThreadSlot m_waiters;
}
