File: issue-65611.rs

package info (click to toggle)
rustc 1.87.0%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 925,564 kB
  • sloc: xml: 158,127; python: 36,039; javascript: 19,761; sh: 19,737; cpp: 18,981; ansic: 13,133; asm: 4,376; makefile: 710; perl: 29; lisp: 28; ruby: 19; sql: 11
file content (63 lines) | stat: -rw-r--r-- 1,377 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use std::mem::MaybeUninit;
use std::ops::Deref;

pub unsafe trait Array {
    /// The array’s element type
    type Item;
    #[doc(hidden)]
    /// The smallest index type that indexes the array.
    type Index: Index;
    #[doc(hidden)]
    fn as_ptr(&self) -> *const Self::Item;
    #[doc(hidden)]
    fn as_mut_ptr(&mut self) -> *mut Self::Item;
    #[doc(hidden)]
    fn capacity() -> usize;
}

pub trait Index : PartialEq + Copy {
    fn to_usize(self) -> usize;
    fn from(i: usize) -> Self;
}

impl Index for usize {
    fn to_usize(self) -> usize { self }
    fn from(val: usize) -> Self {
        val
    }
}

unsafe impl<T> Array for [T; 1] {
    type Item = T;
    type Index = usize;
    fn as_ptr(&self) -> *const T { self as *const _ as *const _ }
    fn as_mut_ptr(&mut self) -> *mut T { self as *mut _ as *mut _}
    fn capacity() -> usize { 1 }
}

impl<A: Array> Deref for ArrayVec<A> {
    type Target = [A::Item];
    #[inline]
    fn deref(&self) -> &[A::Item] {
        panic!()
    }
}

pub struct ArrayVec<A: Array> {
    xs: MaybeUninit<A>,
    len: usize,
}

impl<A: Array> ArrayVec<A> {
    pub fn new() -> ArrayVec<A> {
        panic!()
    }
}

fn main() {
    let mut buffer = ArrayVec::new();
    let x = buffer.last().unwrap().0.clone();
    //~^ ERROR type annotations needed
    //~| ERROR no field `0` on type `&_`
    buffer.reverse();
}