// 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

}
struct S {
static let i: B<Q<T where A"""
}
}
import Foundation
return "\(g, e)
return true
struct d: U -> T) {
}()
extension NSSet {
class B
protocol e == { x }
func g<T) {
}
typealias e : d = b: a {
self)
protocol e = T, b = b: A? = b> T
struct B<Q<T](")
let f : c> (b
let c : AnyObject, AnyObject) {
}
struct d: T.B
class A : A> (self)?
var d = [unowned self.dynamicType)
import Foundation
c> {
let c: a = b: T : NSObject {
func f.b in
typealias e == c>: String {
typealias e {
if c {
private class C) {
}
protocol c = b
}
protocol a = {
protocol P {
func compose()
class func b
}("")
}
let t: P> {
import Foundation
}
import Foundation
struct B<()
let i: T>? = A>()
let c
}
protocol P {
}
}
d.h
import Foundation
S<T -> {
}
}
d.c()
}
enum S<T>Bool
