@@ -652,15 +652,37 @@ func rdar36054961() {
652
652
} ] )
653
653
}
654
654
655
+ protocol P_37790062 {
656
+ associatedtype T
657
+ var elt : T { get }
658
+ }
659
+
655
660
func rdar37790062( ) {
656
661
struct S < T> {
657
662
init ( _ a: ( ) -> T , _ b: ( ) -> T ) { }
658
663
}
659
664
665
+ class C1 : P_37790062 {
666
+ typealias T = Int
667
+ var elt : T { return 42 }
668
+ }
669
+
670
+ class C2 : P_37790062 {
671
+ typealias T = ( String , Int , Void )
672
+ var elt : T { return ( " question " , 42 , ( ) ) }
673
+ }
674
+
660
675
func foo( ) -> Int { return 42 }
661
676
func bar( ) -> Void { }
662
677
func baz( ) -> ( String , Int ) { return ( " question " , 42 ) }
678
+ func bzz< T> ( _ a: T ) -> T { return a }
679
+ func faz< T: P_37790062 > ( _ a: T ) -> T . T { return a. elt }
663
680
664
681
_ = S ( { foo ( ) } , { bar ( ) } ) // Ok, should infer T to be 'Void'
665
682
_ = S ( { baz ( ) } , { bar ( ) } ) // Ok, should infer T to be 'Void'
683
+ _ = S ( { bzz ( ( " question " , 42 ) ) } , { bar ( ) } ) // Ok
684
+ _ = S ( { bzz ( String . self) } , { bar ( ) } ) // Ok
685
+ _ = S ( { bzz ( ( ( ) , ( ( ) ) ) ) } , { bar ( ) } ) // Ok
686
+ _ = S ( { bzz ( C1 ( ) ) } , { bar ( ) } ) // Ok
687
+ _ = S ( { faz ( C2 ( ) ) } , { bar ( ) } ) // Ok
666
688
}
0 commit comments