                 return
             }
             
-            storage[key] = WeakDictionaryIndex<Key, Value>(key: key, value: value)
+            storage[key] = WeakDictionaryReference<Key, Value>(key: key, value: value)
         }
     }
     


public struct WeakDictionary<Key : Hashable & Comparable, Value : AnyObject> : Collection {
    
    public typealias Index = DictionaryIndex<Key, WeakDictionaryIndex<Key, Value>>
    
    private var storage: Dictionary<Key, WeakDictionaryIndex<Key, Value>>
    
    public init() {
        storage = Dictionary<Key, WeakDictionaryIndex<Key, Value>>()
    }
    
    private init(withStorage s: Dictionary<Key, WeakDictionaryIndex<Key, Value>>) {
        storage = s
    }
    

        return storage.index(after: i)
    }
    
    public subscript(position: Index) -> WeakDictionaryReference<Key, Value> {
        get {
            let v = storage.values[position]
            return v
