File tree Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Expand file tree Collapse file tree 1 file changed +42
-0
lines changed Original file line number Diff line number Diff line change 1+ #![ feature( nll) ]
2+ // compile-pass
3+
4+ // rust-lang/rust#32382: Borrow checker used to complain about
5+ // `foobar_3` in the `impl` below, presumably due to some interaction
6+ // between the use of a lifetime in the associated type and the use of
7+ // the overloaded operator[]. This regression test ensures that we do
8+ // not resume complaining about it in the future.
9+
10+
11+ use std:: marker:: PhantomData ;
12+ use std:: ops:: Index ;
13+
14+ pub trait Context : Clone {
15+ type Container : ?Sized ;
16+ fn foobar_1 ( container : & Self :: Container ) -> & str ;
17+ fn foobar_2 ( container : & Self :: Container ) -> & str ;
18+ fn foobar_3 ( container : & Self :: Container ) -> & str ;
19+ }
20+
21+ #[ derive( Clone ) ]
22+ struct Foobar < ' a > {
23+ phantom : PhantomData < & ' a ( ) >
24+ }
25+
26+ impl < ' a > Context for Foobar < ' a > {
27+ type Container = [ & ' a str ] ;
28+
29+ fn foobar_1 < ' r > ( container : & ' r [ & ' a str ] ) -> & ' r str {
30+ container[ 0 ]
31+ }
32+
33+ fn foobar_2 < ' r > ( container : & ' r Self :: Container ) -> & ' r str {
34+ container. index ( 0 )
35+ }
36+
37+ fn foobar_3 < ' r > ( container : & ' r Self :: Container ) -> & ' r str {
38+ container[ 0 ]
39+ }
40+ }
41+
42+ fn main ( ) { }
You can’t perform that action at this time.
0 commit comments