Remove takes an offset, not a value as far as I know. If you need fast lookup and removal you could use hashes instead: int main(string[] argv) { auto a = new A; SlotDelegate x = &a.DIT; bool[SlotDelegate] _slotDg; _slotDg.remove(x); return 0; }