// This source file is part of the Swift.org open source project
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors

// RUN: not %target-swift-frontend %s -typecheck
[]
}
protocol p {
}
protocol g : p {
}
n    j  }
}
protocol k {
   class func q()
}
class n: k{  class func q {}
func r<e: t, s where j<s> == e.m { func g
k q<n : t> {
    q g: n
}
func p<n>() ->(b: T) {
}
f(true as Boolean)
f> {
 c(d ())
}
func b(e)-> <d>(() -> d)
d ""
e}
class d {
    func b((Any, d)typealias b = b
d> Bool {
    e !(f)
 []
}
f
m)
        return ""
    }
}
class C: B, A {
    over  }
}
func e<T where T: A, T: B>(t: T) {
    t.c()
}
func a<T>() -> (T -> T) -> T {
 T, T -> T) ->)func typealias F = Int
    func g<T where T.E == F>(f: B<T>) {
    }
}
