   /// initializers of `AnyBidirectionalCollection` and
   /// `AnyRandomAccessCollection` for details.
   public init<
-    T, C: Collection where C.Iterator.Element == Child
+    Subject, C : Collection where C.Iterator.Element == Child
   >(
-    _ subject: T,
+    _ subject: Subject,
     children: C,
     displayStyle: DisplayStyle? = nil,
     ancestorRepresentation: AncestorRepresentation = .Generated
   ) {
-    self.subjectType = T.self
+    self.subjectType = Subject.self
     self._makeSuperclassMirror = Mirror._superclassIterator(
       subject, ancestorRepresentation)
       

  ///   `AnyRandomAccessCollection` later.  See the failable
  ///   initializers of `AnyBidirectionalCollection` and
  /// `AnyRandomAccessCollection` for details.
  public init<T>(
    _ subject: T,
    children: DictionaryLiteral<String, Any>,
    displayStyle: DisplayStyle? = nil,
    ancestorRepresentation: AncestorRepresentation = .Generated
  ) {
    self.subjectType = T.self
    self._makeSuperclassMirror = Mirror._superclassIterator(
      subject, ancestorRepresentation)
      

  }
  
  @warn_unused_result
  internal static func _superclassIterator<Subject : Any>(
    subject: Subject, _ ancestorRepresentation: AncestorRepresentation
  ) -> ()->Mirror? {

    if let subject = subject as? AnyObject,
      let subjectClass = Subject.self as? AnyClass,
      let superclass = _getSuperclass(subjectClass) {

      switch ancestorRepresentation {
