File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change 1+ // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ pub trait OpInt < ' a > { fn call < ' a > ( & ' a self , int , int ) -> int ; }
12+
13+ impl < ' a > OpInt < ' a > for ' a |int, int| -> int {
14+ fn call ( & self , a : int , b : int ) -> int {
15+ ( * self ) ( a, b)
16+ }
17+ }
18+
19+ fn squarei < ' a > ( x : int , op : & ' a OpInt ) -> int { op. call ( x, x) }
20+
21+ fn muli ( x : int , y : int ) -> int { x * y }
22+
23+ pub fn main ( ) {
24+ let f = |x, y| muli ( x, y) ;
25+ {
26+ let g = & f;
27+ let h = g as & OpInt ;
28+ squarei ( 3 , h) ;
29+ }
30+ }
You can’t perform that action at this time.
0 commit comments