public protocol P1 {
  associatedtype Inner
}

public protocol P2 {
  associatedtype Outer : P1
}

public protocol P3 {
  associatedtype First
  associatedtype Second
}

public protocol P4 {
  associatedtype Result
  func getResult() -> Result
}

public protocol ClassBoundP: class {
  associatedtype Inner
}

fileprivate protocol FileprivateProtocol {}

public struct HasFileprivateProtocol {
  fileprivate let x: FileprivateProtocol
}
