   }
   
   @warn_unused_result
-  internal static func _superclassIterator<T: Any>(
-    subject: T, _ ancestorRepresentation: AncestorRepresentation
+  internal static func _superclassIterator<Subject : Any>(
+    subject: Subject, _ ancestorRepresentation: AncestorRepresentation
   ) -> ()->Mirror? {
 
     if let subject = subject as? AnyObject,
-      let subjectClass = T.self as? AnyClass,
+      let subjectClass = Subject.self as? AnyClass,
       let superclass = _getSuperclass(subjectClass) {
 
       switch ancestorRepresentation {

  /// Initialize `self` with a detailed textual representation of
  /// `subject`, suitable for debugging.
  ///
  /// * If `T` conforms to `CustomDebugStringConvertible`, the result
  ///   is `subject`'s `debugDescription`.
  ///
  /// * Otherwise, if `T` conforms to `CustomStringConvertible`, the result
  ///   is `subject`'s `description`.
  ///
  /// * Otherwise, if `T` conforms to `Streamable`, the result is
  ///   obtained by calling `subject.writeTo(s)` on an empty string s.
  ///
  /// * Otherwise, an unspecified result is supplied automatically by
  ///   the Swift standard library.
  ///
  /// - SeeAlso: `String.init<T>(T)`
  public init<T>(reflecting subject: T) {
    self.init()
    debugPrint(subject, terminator: "", toStream: &self)
  }

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